为什么下面的代码输出相同的地址? #包括 #包括 int main(){ char x[5]={'h','e','l','l','o'}; printf(“x=%p”,x); printf(“\n&x=%p”、&x); 返回0; }

为什么下面的代码输出相同的地址? #包括 #包括 int main(){ char x[5]={'h','e','l','l','o'}; printf(“x=%p”,x); printf(“\n&x=%p”、&x); 返回0; },c,arrays,pointers,C,Arrays,Pointers,第一条语句不应该打印x[0]的地址,而第二条语句不应该打印x的地址,即数组x的地址。数组的地址是该数组第一个元素的地址 事实上,标准规定,除非在有限的情况下,否则数组将衰减为指向其第一个元素的指针 x[n]被定义为*(x+n)-如果您使用零作为n的值,如果我没有弄错的话,您应该希望看到eqivalence。第一次访问的不是数组“x”的第一个索引,而是整个数组。它应该是printf(“x=%p,x[0])。如果我没有弄错的话。为什么您希望x[0]的地址与x的地址不同?两者都是x[0]和整个x位于内

第一条语句不应该打印x[0]的地址,而第二条语句不应该打印x的地址,即数组x的地址。数组的地址是该数组第一个元素的地址

事实上,标准规定,除非在有限的情况下,否则数组将衰减为指向其第一个元素的指针


x[n]
被定义为
*(x+n)
-如果您使用零作为
n
的值,如果我没有弄错的话,您应该希望看到eqivalence

。第一次访问的不是数组“x”的第一个索引,而是整个数组。它应该是printf(“x=%p,x[0])。如果我没有弄错的话。为什么您希望
x[0]
的地址与
x
的地址不同?两者都是
x[0]
和整个
x
位于内存中相同的地址。难怪打印的地址是相同的。请注意,如果打印
x+1
&x+1
,则会得到不同的值。
#include <stdio.h>
#include <stdlib.h>
int main() {
    char x[5] = {'h', 'e', 'l', 'l', 'o'};
    printf("x=%p", x);
    printf("\n&x=%p", &x);
    return 0;
}