c-array如何在内存中存储/表示

时间:2014-04-10 08:51:06

标签: c arrays pointers

char buffer[]="foobar";

我知道缓冲区是指向第一个元素的char *指针,所以buffer ==& buffer [0]但是 为什么& buffer == buffer? & buffer应该给出缓冲区char *的内存地址 而不是第一个元素的地址?

另外,当我做(int)缓冲区时会发生什么?

2 个答案:

答案 0 :(得分:1)

buffer是第一个元素的地址,而& buffer实际上是数组本身的地址。该数组将直接存储在堆栈中。这就是& buffer == buffer的原因。

它不是指针而是数组。如果您已将其声明为char *,则它不会是& buffer == buffer

答案 1 :(得分:0)

这样想。

buffer是数组第一个元素的地址。所以它是整数的地址。

&buffer是数组的地址。因此&buffer实际上与buffer相同,但他们的行为会有所不同。

例如如果你做buffer+1,它将增加int的大小,但&buffer+1将增加数组的大小,即一个元素的大小*元素的数量。


编辑。最初我写了buffer++而不是buffer+1。请参阅评论部分,了解我编辑它的原因。