2013-11-29 140 views
0

的數組我不明白這部分代碼:指向字符串的指針

char *arrStr[3]; 
arrStr[0] = "hola"; //works 
*(arrStr+1) = "guys"; //works 
arrStr++;    // doesn't work why? 

char **arrStr2 = arrStr; //works 
arrStr2++; //works 

我不明白爲什麼arrStr++不同時arrStr2工程工作。

這很奇怪,因爲我在做同樣的事情,但在一個案例中,它在另一個案件中工作,爲什麼?

回答

3

*arrStr[3]是指向char的3個指針的數組,而**arrStr2指向指向char的指針。在

arrStr[0] = "hola"; 

arrStr是一個數組,數組名不可改變左值,因此你不能修改它。另一方面,可以在arrStr上進行修改,因爲它是指向指針的指針而不是數組。請記住數組不是指針

0
char *arrStr[3]; 

如果使用數組名作爲指針,你必須知道,這個指針是const指針,所以你不能做++--操作,char *str = "ciao";只是聲明瞭一個正常的指針,你可以做每一個。

2

arrStr是一個指針數組,你不能修改數組名。 arrStr++;將不會編譯。

arrStr2是一個指針指針,你可以修改一個指針。你應該考慮一個更好的名字,因爲它不是一個數組。

+0

爲什麼不呢?他們裏面有一個像指針沒有參考? –

+0

@GiovanniFar在某些情況下,數組名稱會自動轉換爲指向第一個元素的指針(就像函數參數傳遞一樣),但是不,**數組不是指針**。 –

+0

確定,但兩者都有一個參考...所以我不能看到區別 –