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中没有堆栈或堆这样的东西。这是一种常见的实现,但它不是标准所要求的。 –
这个问题会不断出现。我们应该保持这个问题的开放性,并将其他人视为偶像,因为这有一个很好的答案(漂亮的照片)。 –