指向c ++字符串的指针

mmm*_*ttt 3 c++ pointers stl

在下面的代码中,我在change()函数中使用指向c ++字符串的指针.

在使用指向字符串的指针时,是否仍然使用字符串类'运算符?例如,at()适用于[]运算符,但有没有办法使用[]运算符?

#include <string>
#include <iostream>

using namespace std;

void change(string * s){

    s->at(0) = 't';
    s->at(1) = 'w';
    // s->[2] = 'o'; does not work
    // *s[2] = 'o'; does not work


}

int main(int argc,char ** argv){

    string s1 = "one";

    change(&s1);

    cout << s1 << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

whe*_*ies 12

取消引用它:

(*myString)[4]
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用引用建议而不是指针:

void change(string &_myString){
    //stuff
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以像使用对象一样使用所有东西.

  • @mmmmaaaatttttttttttttt:这是一个不使用引用的不好理由.使用引用的好处是它清楚地表达了参数不能为空的条件.在一个大项目中,这有助于明确需要进行空检查的位置,并消除许多冗余检查的可能性.您的函数应清楚地命名,以便从其名称中预期会发生变异行为."改变"至少在某种程度上是这样的. (5认同)
  • @mmmmaaaatttttttttttttt:没说.你的教授错了. (2认同)

Ben*_*igt 6

你遇到了运营商优先问题,试试吧

(*s)[0]
Run Code Online (Sandbox Code Playgroud)


Eug*_*nca 5

另一个解决方案,为了完整性:

s->operator[](2) = 'o';
Run Code Online (Sandbox Code Playgroud)