1
Q
爲字符指針和陣列
A
回答
12
這是因爲char buffer[100]
將被分配到堆棧上,這將佔用100個字節的存儲空間。因此,堆棧指針esp
/rsp
將指向下一個存儲器(服用棧向下增長)
+- +------------+ <-- ebp
| | |
b +------------+
u | |
f +------------+
f | | holds 100 elements of buffer array
e +------------+
r .
.
a .
r +------------+
r | |
+- +------------+ <-- esp
並要在char *buffer
只有一個char *
類型的對象的存儲器(sizeof (char *)
)將在堆棧上被分配的情況。當您執行buffer = malloc (100)
時,將返回保證100字節的內存塊的基址。這個分配的內存通常從堆中取出。因此現在buffer
保存剛分配的內存塊的基地址。所以,在這種情況下,因爲該存儲器是從堆中,堆棧僅保持char *
類型的對象,因此,堆棧指針是在更高的位置(以向下生長堆棧)
+------------+ <-- ebp
| 0xabcd | buffer , char * type
+-----+------+ <-- esp
|
|
| 0xabcd 0xabce
| +-----+-----+-----+ +-----+-----+
+------------>| | | | . . . | | |
+-----+-----+-----+ +-----+-----+
0xabcf . . .
| |
+------ 100 bytes mem block in heap --+
還要注意理查德·J·羅斯III的評論。
相關問題
- 1. 創建字符指針陣列和整數指針
- 2. 指向字符串的指針陣列
- 3. 字符指針成char陣列
- 4. 指針陣列指針2d陣列
- 5. JNA陣列和指針
- 6. Mudflap和指針陣列
- 7. 陣列和指針形狀
- 8. 新陣列和指針
- 9. 2D陣列和指針
- 10. 陣列指針和函數
- 11. 指針陣列
- 12. 指針陣列
- 13. 陣列指針陣列
- 14. 陣列指針到陣列
- 15. 轉換字符指針爲unsigned char陣列
- 16. 指向Char陣列指針的指針
- 17. 與字符指針和整數指針
- 18. c指針陣列
- 19. pthread指針陣列
- 20. C - 傳遞和操作字符指針和指針指針
- 21. 指向字符數組陣列的指針
- 22. qsorting指向字符串的指針陣列時發生崩潰
- 23. 指向字符數組的指針陣列
- 24. 指向數組的指針,在差2D陣列和1d陣列
- 25. 寫指針的指針陣列中的
- 26. 陣列的函數指針的指針
- 27. 指針陣列上的指針
- 28. C指針,指針,字符
- 29. 轉換指針的地址字符串和分配字符串ADRESS爲指針?
- 30. C字符串和指針
我看到至少有兩種不同的方法可以實例化'char buffer [100]'。在char *緩衝區塊內是'char buffer [100]'還是全局的?你問的問題爲什麼'char buffer [100]'出現在堆棧上而'buffer = malloc(100)'不是? 'malloc'沒有從棧中獲取內存。 – KeithSmith
C中沒有堆棧或堆這樣的東西。這是一種常見的實現,但它不是標準所要求的。 –
這個問題會不斷出現。我們應該保持這個問題的開放性,並將其他人視爲偶像,因爲這有一個很好的答案(漂亮的照片)。 –