Q
聲明的含義
1
A
回答
4
這意味着ch
是一個指向字符的指針。當您這樣做時char* ch = "hello"
ch
將指向第一個字符,即字符h
。要指向第二個字符,您可以執行ch + 1
或ch[1]
。請注意,理想情況下,ch
的類型應爲const char*
,因爲您無法寫入指向的內存位置。
3
字符串文字被靜態存儲在程序二進制文件的某處。它們很可能被加載到內存中只讀的「數據」部分,但這是未定義的行爲。
分配字符串文字只是傳遞第一個字節的地址;在這種情況下,char* ch
指向「hello」中的'h'。
注意:修改靜態字符串是未定義的行爲!雖然你可以得到一個指針,但任何賦值都是危險的。
+0
...所以,它應該是const char * ch – cdarke
0
聲明編譯爲:
080483b4 <main>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: 83 ec 10 sub $0x10,%esp
80483ba: c7 45 fc 94 84 04 08 movl $0x8048494,-0x4(%ebp)
80483c1: c9 leave
80483c2: c3 ret
字符串在0x8048494是 「你好\ 0」 作爲在這裏看到來自XXD:
0000490: 0100 0200 6865 6c6c 6f00 0000 011b 033b ....hello......;
1
有幾件事情發生在這裏。
"hello"
等於{ 'h', 'e', 'l', 'l', 'o', '\0' }
。即,它是一組字符。數組可以隱式轉換爲相應的指針類型。因此,這裏的語句確實創建了一個(靜態)字符數組,並將指向第一個元素的指針指向變量ch
(順便說一句,這是錯誤的命名)。
相關問題
- 1. 本聲明的含義?
- 2. 函數聲明的含義
- 3. C中的聲明的含義
- 4. 的 「InputOutputArray」 在CvStereoCalibrate的含義()聲明
- 5. jquery匿名函數聲明的含義
- 6. C#:聲明的含義...動作wrappedAction =()=>
- 7. 含義和聲明的順序
- 8. PowerShell新對象聲明中'+'的含義
- 9. 上的多個含義,「如果」聲明
- 10. 這個聲明的含義是什麼?
- 11. predicted_value1 = regr1.predict(9)本聲明的含義
- 12. 此聲明計數的含義[array [i]]
- 13. Alloy中「private」關鍵字的含義? '枚舉'聲明的含義?
- 14. 包含聲明
- 15. 彙編變量聲明含義
- 16. PHP包含聲明回聲'?'
- 17. 聲明包含XSD
- 18. C#的LINQ包含聲明
- 19. 隱含的聲明2
- 20. 聲明VS定義
- 21. 聲明和定義
- 22. 如何包含我聲明的自定義類型的參數?
- 23. 的Sql自定義聲明
- 24. <X>在java方法聲明中的含義是什麼?
- 25. 星號*在函數聲明中的含義是什麼?
- 26. 逗號在變量聲明中的含義是什麼?
- 27. ^字符在C++聲明中的含義是什麼?
- 28. 「其他=>'0'」在轉讓聲明中的含義是什麼?
- 29. 函數聲明中模板關鍵字的含義
- 30. c#變量聲明中「單個空間」的含義?
請注意,此常量去除特殊轉換在C++ 98/C++ 03中已棄用,並且在C++ 0x中被刪除(即,使用符合的C++ 0x編譯器將不會編譯)。 –
downvote的具體原因是什麼?答案有問題嗎? – Naveen
+1以反擊匿名downvote。 –