2011-10-19 27 views
1

我注意到以下功能:在传递给函数的char指针上使用下标运算符不会修改该值。为什么?

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

实际上不会修改的myString。然而,这个函数:

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

很明显,我为什么myFunction2工作,虽然我不知道为什么myFunction的不起作用。你能解释一下吗?

更新: 不用等。它工作正常。我很愚蠢。我可以删除这个东西吗?

+0

我不知道为什么。你能展示一下你怎么称呼这些功能吗? –

+1

这两个功能都是相同的,所以你不应该看到你所看到的。你如何测试这个? – Mysticial

+1

我不知道我一直在吸烟。刚试过这个,它的工作原理。 Errrr无法删除问题......陷入尴尬的状态... –

回答

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 

所以,如果你真正看到你说什么你除了我自己的丰富经验外,我没有任何真正的理由怀疑你.-),问题在于别处。

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

+0

或通过ref(p *&)传递指针并解决问题 – smallB

相关问题