Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符指针和数组的堆栈指针差异_C - Fatal编程技术网

C 字符指针和数组的堆栈指针差异

C 字符指针和数组的堆栈指针差异,c,C,我有一个char数组,如下所示: char buffer[100] char *buffer buffer = malloc(100) 另一个char指针如下: char buffer[100] char *buffer buffer = malloc(100) 当我使用检查堆栈指针时,它们实际上是不同的。为什么?这是因为字符缓冲区[100]将在堆栈上分配,这将占用100字节的存储空间。因此,堆栈指针esp/rsp将指向较低的内存(使堆栈向下增长) 还请注意Richard J

我有一个
char
数组,如下所示:

 char buffer[100]
 char *buffer
 buffer = malloc(100)
另一个
char
指针如下:

 char buffer[100]
 char *buffer
 buffer = malloc(100)

当我使用检查堆栈指针时,它们实际上是不同的。为什么?

这是因为
字符缓冲区[100]
将在堆栈上分配,这将占用100字节的存储空间。因此,堆栈指针
esp
/
rsp
将指向较低的内存(使堆栈向下增长)


还请注意Richard J.Ross III的评论。

我看到至少有两种不同的方法可以实例化
字符缓冲区[100]
char buffer[100]
是在
char*buffer
的块内还是全局的?您是否在问为什么
char buffer[100]
出现在堆栈上而
buffer=malloc(100)
没有出现<代码>malloc不会从堆栈中获取内存。C中没有堆栈或堆。这是一个常见的实现,但不是标准所要求的。这个问题将不断出现。我们应该保持这个问题的开放性,关闭其他问题作为DUP,因为这有一个很好的答案(漂亮的图片)。