2009-12-10 144 views

回答

26

第一個創建一個包含字符串的char數組。數組的內容可以修改。第二個創建一個指向字符串文字的字符指針。字符串文字不能修改。

+0

據我所知,在ANSI C中都可以修改 – psihodelia 2009-12-10 12:19:01

+15

你知道錯了。該標準禁止修改字符串文字。 – 2009-12-10 12:20:53

+0

好的,謝謝!現在,我會永遠記住它:) – psihodelia 2009-12-10 12:23:08

1

推測,功能f修改傳遞給它的字符串的內容。

+0

是的,它會修改。但爲什麼f(p_var)使crush和f(a_var)不是? – psihodelia 2009-12-10 12:14:32

+1

因爲: char * p_var =「XXX」; 無法修改。 – 2009-12-10 12:16:04

0

數組可以作爲指針對待(通常),但這並不意味着它們總是可以互換的。正如另一個人所說,你的p_var指向一個文字,靜態的東西不能改變。它可以指向別的東西(例如,p_var = & a_var [0]),但不能更改由引號指定的原始值....

類似的問題是,當您將變量定義爲數組放入一個文件中,然後將其作爲指針外部使用。

問候

1

正如有人說,char *p_var = "XXX";創建一個指向一個字符串文字是不能改變的,所以編譯器實現可以自由地重用文本,例如:

char *p_var = "XXX"; 
char *other = "XXX"; 

編譯器能選擇通過在存儲器中只存儲一次「XXX」來優化這一點,並使兩個指針指向它,修改它們的值可能會導致意外的行爲,所以這就是爲什麼你不應該嘗試修改它們的內容。

相關問題