【发布时间】:2013-11-19 20:59:51
【问题描述】:
我对指向数组开头的指针在内存中的位置有点困惑。据我了解,数组和指针可以使用相同的函数,如 *、& 和 []。所以如果我创建一个 char 数组,我明白:buffer == &buffer[0].
所以没有括号的数组名就像一个指针,其中包含数组第一个条目的地址,对吗?
但是当我试图找出指针的地址(存储 &buffer[0] 的地址)时,它会给我存储在指针(&arrayname[0])中的相同值。这个怎么可能?虚拟内存中的相同地址如何包含地址和缓冲区[0]的值(在下面的代码中等于'H')?
#include <stdio.h>
#include <windows.h>
void main() {
char buffer[] = "Hello";
printf("Address buffer: %d\n", &buffer);
printf("Value buffer: %d\n", buffer);
printf("Address buffer[0]: %d\n", &buffer[0]);
printf("Value buffer[0]: %c\n", buffer[0]);
printf("Address buffer[1]: %d\n", &buffer[1]);
system("pause");
}
所以基本上我对第一个输出感到困惑。不应该和第二个不一样吗?非常感谢您的解释...
问候
【问题讨论】:
-
请阅读一本好的 C(或 C++)编程书籍。他们解释了所有细节。 (基本上,数组可以衰减为指针)。并使用
%p到printf指针。 -
@BasileStarynkevitch 这不是他要问的。
-
要打印出地址,请使用
%p转换说明符。