我已經瞭解到,聲明一個字符數組的傳統方式如下:指針和C數組 - 極其混亂
char c[] = "John";
但是,我也注意到,您可以將它聲明爲:
char *c = "John";
這是如何工作的?我知道它與指針有關,但有人可以詳細說明嗎?任何幫助將不勝感激。
我已經瞭解到,聲明一個字符數組的傳統方式如下:指針和C數組 - 極其混亂
char c[] = "John";
但是,我也注意到,您可以將它聲明爲:
char *c = "John";
這是如何工作的?我知道它與指針有關,但有人可以詳細說明嗎?任何幫助將不勝感激。
在你的第一個例子中,c
是一個char
的數組。但在:
char *c = "John";
c
這裏不是一個數組,但指針(類型char *
)到一個字符串。指針和數組是不同類型的C.
下面是一個很好的鏈接,如果你想了解指針和數組:
「字符串文字(正規術語,雙引號字符串在C源)可以用兩種稍微不同的方式...「 http://c-faq.com/decl/strlitinit.html
好吧..我希望我不會在這裏搞砸的東西,但我看到它這樣。
通過寫入=「John」,您可以在程序存儲器的某處放置一個字符串,該字符串以'\ 0'結尾。
這就是爲什麼你的通話沒有任何區別。兩者都會在程序存儲器中創建一個指向字符串開頭的char指針。
如果您要分配此內存與malloc()。指針指向你的運行時內存,而不是指向程序內存的某處。
閱讀[comp.lang.c FAQ](http://www.c-faq.com)的第6部分,並忽略任何試圖告訴你數組是「真正」指針的人。 –
@RadicalOne,你也可以閱讀Kernighan和裏奇(K&R)這不是一個自我發表的論戰。他們將解釋如何使用指針以及如何使用指針來引用數組。 – JackCColeman
我看到你的問題,你應該閱讀完整的答案:[sizeof(&arr)返回什麼?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) –