1

私が持っていると言う

string stringInput = "hello";

alter(stringInput);

cout << stringInput;

そして関数:

void alter(string stringIn){
     stringIn[0] = stringIn[3];
}

理想的には、cout に「lello」を生成してもらいたいと考えています。しかし、今は元のように「hello」を返すだけです。これはアドレスとポインタに関係があることはわかっています...どうすればこれを達成できますか?

4

3 に答える 3

4

あなたがする必要があるのは、参照によって文字列を渡すことです:

void alter(string& stringIn){
     //          ^
     stringIn[0] = stringIn[3];
}

また、それに応じて、の関数宣言を変更する必要がありますalter()

于 2013-02-18T03:43:20.827 に答える
4

これは、実際には、関数で使用するために文字列の新しいコピーが作成されたためです。関数内で文字列を直接変更するには、次のように関数ヘッダーの文字列名の前に&を追加します。

 void alter(string &stringIn){

これは、参照によって文字列を渡します。それ以外の場合は、関数から文字列を返すことができます。

于 2013-02-18T03:44:35.677 に答える
2

stringInはローカル変数です。したがって、関数に値として渡すと、異なるアドレスで新しいstringInが作成されます。したがって、alterで行っている変更は、新しいstringInにのみ影響します。それを機能させるには、stringInの参照を受け取る必要がありますalter

void alter(string& stringIn){

 stringIn[0] = stringIn[3];
}
于 2013-02-18T03:46:21.300 に答える