众所周知,数组名代表了数组的首地址,但是如果对数组名取地址又代表什么呢,答案是还是代表数组的首地址,那么他们之间的区别是什么呢。答案是:一个是指向数组元素的指针,一个是指向数组的指针。
至于为什么数组d,a的地址没有按顺序排放,之间留了12个字节的空隙,偶也没有搞明白。
还有感觉不怎么爽的是 sizeof(a)和sizeof(&a)的大小都是12。。总之感觉不是那么完备。
int main()
{
int d[]={111,222,333,444,555,666,777,888,999,1000,1001,1002,1003,1004};
int a[]={1,2,3};
printf("%d", *(&a+2));
return 0;
}
这个是测试程序。&a+2, &a的值和a的值都一样都等于&a[0],a+2表示的是&a[2]但是&a+2表示的就不是这个了。这里的加2其实是加了2×6个字节,即2个数组的大小,此时指针已经指向了数组d中的元素了。本例中输出的数值是222.{
int d[]={111,222,333,444,555,666,777,888,999,1000,1001,1002,1003,1004};
int a[]={1,2,3};
printf("%d", *(&a+2));
return 0;
}
至于为什么数组d,a的地址没有按顺序排放,之间留了12个字节的空隙,偶也没有搞明白。
还有感觉不怎么爽的是 sizeof(a)和sizeof(&a)的大小都是12。。总之感觉不是那么完备。