在传递给函数的 char 指针上使用下标运算符不会修改值。为什么?



我注意到下面的函数:

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

实际上不会修改myString。但是,这个函数可以:

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

这是显而易见的我为什么myFunction2工作,虽然我不确定为什么myFunction不工作。你能解释一下吗?

更新:没有等待。它工作得很好。我是愚蠢的。我可以删除这个东西吗?

不,我认为你说的不对。如果输入以下代码:

#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

所以,如果你真的看到了你说你看到的东西,而我除了我自己丰富的经验之外没有真正的理由怀疑你:-),问题出在别处。

在这种情况下,你需要给我们显示错误行为的最小的完整程序。

相关内容

  • 没有找到相关文章

最新更新