Доступ к элементам в std :: string с указателями - PullRequest
2 голосов
/ 05 июля 2019

Как я могу получить доступ к отдельным элементам в std :: string с указателями? Возможно ли это без приведения типа к константному символу *?

#include <iostream>
#include <string>
using namespace std;

int main() {

    // I'm trying to do this...
    string str = "This is a string";
    cout << str[2] << endl;

    // ...but by doing this instead
    string *p_str = &str;
    cout << /* access 3rd element of str with p_str */ << endl;

    return 0;
}

1 Ответ

7 голосов
/ 05 июля 2019

Есть два способа:

  1. Вызовите функцию operator[] явно:

    std::cout << p_str->operator[](2) << '\n';
    

    Или используйте функцию at

    std::cout << p_str->at(2) << '\n';
    

    Оба из них почти эквивалентны.

  2. Или разыменуйте указатель, чтобы получить объект, и используйте обычное индексирование:

    std::cout << (*p_str)[2] << '\n';
    

В любом случае вам нужно разыменовать указатель. Через оператор "стрелка" -> или с помощью оператора прямой разыменования * не имеет значения.

...