2013-07-02 232 views
2

char *p = "a";有效,但不是int *p = 2;char *p = 'a';他們爲什麼這樣設計?指針初始化

+0

「while」和「do ... while」的必要性是什麼?不應該「夠」嗎?技術上是的,但所有三個都給出了更清楚地表達自己的選項。 – Jon

+0

1)「a」在內存中有一些不變的地址,但不是2。 2)在**之前**或**之前增加**。 –

+2

「a」是一個可以轉換爲char *的char []。 – user1937198

回答

4

任何東西C.So

char *p = " a"被視爲字符串說你逝去的字符串的基地址爲char pointer.which是有效的。

int *pp是一個整數指針,所以p可以容納一個地址爲整數,所以int *p = 2是無效的。

同樣char *p是指向性格讓p可容納一個字符的地址,以便char *p = 'a'是無效的,因爲'a'只是一個字符不能解決字符。

1

因爲"a"有一個類型的char *,並2沒有一個類型的int *。請注意0​​也是無效的。

3

一個字符串文字類型是char[n],並且指派給char*沒問題。
點都是指針。

char *p = "a";意味着p點串"a"(在存儲器中的某些地方,的"a"類型爲char[2])。

p   23 24 
    +----+  +----+----+ 
    | 23 |  | a | \0 |   
    +----+  +----+----+ 

2'a'是整型值,不是一個有效的地址因此,以下聲明是錯誤/警告:"initialization makes pointer from integer without a cast"

int *p = 2; and 
char *p = 'a'; 

:在一個字符常量是int型,但是不是 char refrence。裏面" " wrritten

+0

實際上,由於歷史原因,字符串文字具有'char *'類型,即使您不應該嘗試修改其內容。 –

+0

嚴格來說,字符串文字是一個數組,而不是指針。它(和其他數組一樣)在大多數情況下衰減爲指向其第一個元素的指針。 –

+0

@CarlNorum你的意思是'char []'不是'const char *'? –