2011-10-19 59 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

相關問題