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 回答