1

次の関数に気づきました。

void myFunction(char *myString)
{
   myString[0] = 'H';
}

myStringを実際に変更することはありません。ただし、この関数は次のことを行います。

void myFunction2 (char *myString)
{
   *myString = 'H';
}

myFunction2が機能する理由は明らかですが、myFunctionが機能しない理由はわかりません。これを説明してもらえますか?

更新:待つ必要はありません。正常に動作します。私はダムです。これを削除できますか?

4

1 に答える 1

2

いいえ、あなたがそのことについて正しいとは思いません。次のコードを入力した場合:

#include <iostream>

void fn1 (char *s) { *s = 'a'; }
void fn2 (char *s) { s[0] = 'a'; }

int main (void) {
    char str1[] = "hello";
    char str2[] = "goodbye";

    fn1 (str1); std::cout << str1 << std::endl;
    fn2 (str2); std::cout << str2 << std::endl;

    return 0;
}

どちらの関数もデータを適切に変更し、次のように生成することがわかります。

aello
aoodbye

ですから、あなたが実際にあなたが見ていると言っていることを見ていて、私自身の膨大な経験以外にあなたを疑う本当の理由がない場合:-)、問題は他の場所にあります。

その場合、あなたは私たちに誤った振る舞いを示す最小の完全なプログラムを与える必要があります。

于 2011-10-19T05:45:18.137 に答える