char *p = "a";
有效,但不是int *p = 2;
和char *p = 'a';
他們爲什麼這樣設計?指針初始化
指針初始化
回答
任何東西C.So
char *p = " a"
被視爲字符串說你逝去的字符串的基地址爲char pointer.which是有效的。
int *p
說p
是一個整數指針,所以p
可以容納一個地址爲整數,所以int *p = 2
是無效的。
同樣char *p
是指向性格讓p
可容納一個字符的地址,以便char *p = 'a'
是無效的,因爲'a'
只是一個字符不能解決字符。
因爲"a"
有一個類型的char *
,並2
沒有一個類型的int *
。請注意0也是無效的。
一個字符串文字類型是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';
實際上,由於歷史原因,字符串文字具有'char *'類型,即使您不應該嘗試修改其內容。 –
嚴格來說,字符串文字是一個數組,而不是指針。它(和其他數組一樣)在大多數情況下衰減爲指向其第一個元素的指針。 –
@CarlNorum你的意思是'char []'不是'const char *'? –
- 1. 指針初始化
- 2. 初始化指針
- 3. 初始化指針數組的指針
- 4. 指針vs零初始化指針
- 5. 字符指針初始化
- 6. 指針初始化問題
- 7. 初始化指針數組
- 8. 初始化函數指針
- 9. 指針的初始化
- 10. 模板指針初始化
- 11. 初始化指針在C++
- 12. 初始化指針數組
- 13. 初始化指針的typedef
- 14. 指針初始化疑問
- 15. 指針 - 初始化元素
- 16. 初始化結構指針
- 17. 指針在初始化
- 18. 初始化堆棧指針
- 19. 在初始化指針
- 20. 字符指針初始化
- 21. TCHAR指針初始化
- 22. 的char *指針初始化
- 23. 指針初始化:何時將NULL分配給已初始化的指針?
- 24. 如何初始化指針指向C中的指針結構?
- 25. 用指向指針的指針初始化矩陣?
- 26. C++:初始指針
- 27. 通用迭代器/指針初始化
- 28. SWIG python初始化指針爲NULL
- 29. 初始化字符串使用指針
- 30. 初始化一些空指針節點
「while」和「do ... while」的必要性是什麼?不應該「夠」嗎?技術上是的,但所有三個都給出了更清楚地表達自己的選項。 – Jon
1)「a」在內存中有一些不變的地址,但不是2。 2)在**之前**或**之前增加**。 –
「a」是一個可以轉換爲char *的char []。 – user1937198