我对指向数组开头的指针在内存中的位置感到有些困惑。据我理解,数组和指针可以使用相同的函数,如*、&和[]。所以如果我创建一个char数组,我理解:buffer == &buffer[0]。
因此,没有方括号的数组名就像一个指针,它包含了数组第一个条目的地址,对吗?
但是当我试图找出指针的地址(&buffer[0]存储的地址),它将给我与指针(&arrayname[0])中存储的相同值。这怎么可能?同一个虚拟RAM中的地址既包含一个地址,又包含buffer[0]的值(在下面的代码中等于'H')?
基本上我对第一个输出感到困惑。它难道不应该与第二个输出不同吗?非常感谢您的解释... 问候
因此,没有方括号的数组名就像一个指针,它包含了数组第一个条目的地址,对吗?
但是当我试图找出指针的地址(&buffer[0]存储的地址),它将给我与指针(&arrayname[0])中存储的相同值。这怎么可能?同一个虚拟RAM中的地址既包含一个地址,又包含buffer[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");
}
基本上我对第一个输出感到困惑。它难道不应该与第二个输出不同吗?非常感谢您的解释... 问候
%p
转换说明符。 - alk