2010-03-29 147 views
0
char a[]="HELLO"; 
char *p="HELLO"; 

a[2]p[2]獲取相同的字符?C指針和陣列混淆

+2

是的。 __________ – kennytm 2010-03-29 13:01:12

+0

你是指內存中的價值或地址? – ereOn 2010-03-29 13:06:13

回答

0

我想這取決於你使用的編譯器,但答案可能不是。

順便說一句,您可以通過比較兩個字符的地址來輕鬆地進行測試。如果它們不同,那麼:不。

無論如何,你不應該依賴於這一點;)

0

兩者都具有相同的字符值。

+0

...但您應該假設已分配兩個物理上分離的「HELLO」字符串。 – 2011-03-17 09:17:11

3

他們將讀取的是一個char大小的內存塊,每個var指向的內存地址之後,它們位於每個開始之後的2個字符大小的步驟(此處爲2個字節)。這恰好是'L'我的例子,但這不是在內存中的相同地址。

所以是的,在給出的例子中,他們將獲取相同的字符。

+0

你確定它不是相同的內存地址? :) – 2010-03-29 13:05:04

+0

感謝所有.. – 2010-03-29 13:15:37

+0

@Nick D:它不能是相同的內存地址。 'a'是包含字符串文字「HELLO」副本的數組,而'p'是指向字符串文字「HELLO」的指針。 – 2010-03-29 13:20:49

2

是的。

P [2]等於*(P + 2)

HELLO 
^
*(p+2) 

應注意的是,第一 「HELLO」 可能會被存儲在可寫存儲器頁,而第二個 「HELLO」可能會存儲在只讀頁面中。這與您所在的編譯器/平臺非常密切相關。

2

在這兩種情況下,他們將獲取的'L'。但是,它不是一樣的'L'。他們存儲在不同的地方。這意味着如果你比較他們的指針,他們將不會是平等的。