2013-08-19 83 views
0

我已經瞭解到,聲明一個字符數組的傳統方式如下:指針和C數組 - 極其混亂

char c[] = "John"; 

但是,我也注意到,您可以將它聲明爲:

char *c = "John"; 

這是如何工作的?我知道它與指針有關,但有人可以詳細說明嗎?任何幫助將不勝感激。

+1

閱讀[comp.lang.c FAQ](http://www.c-faq.com)的第6部分,並忽略任何試圖告訴你數組是「真正」指針的人。 –

+0

@RadicalOne,你也可以閱讀Kernighan和裏奇(K&R)這不是一個自我發表的論戰。他們將解釋如何使用指針以及如何使用指針來引用數組。 – JackCColeman

+0

我看到你的問題,你應該閱讀完整的答案:[sizeof(&arr)返回什麼?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –

回答

0

在你的第一個例子中,c是一個char的數組。但在:

char *c = "John"; 

c這裏不是一個數組,但指針(類型char *)到一個字符串。指針和數組是不同類型的C.

下面是一個很好的鏈接,如果你想了解指針和數組:

http://www.torek.net/torek/c/pa.html

0

好吧..我希望我不會在這裏搞砸的東西,但我看到它這樣。

通過寫入=「John」,您可以在程序存儲器的某處放置一個字符串,該字符串以'\ 0'結尾。

這就是爲什麼你的通話沒有任何區別。兩者都會在程序存儲器中創建一個指向字符串開頭的char指針。

如果您要分配此內存與malloc()。指針指向你的運行時內存,而不是指向程序內存的某處。