2008年12月21日星期日

数组指针

众所周知,数组名代表了数组的首地址,但是如果对数组名取地址又代表什么呢,答案是还是代表数组的首地址,那么他们之间的区别是什么呢。答案是:一个是指向数组元素的指针一个是指向数组的指针。
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×12个字节,即2个数组的大小,此时指针已经指向了数组d中的元素了??。本例中输出的数值是1245012.
至于为什么数组d,a的地址没有按顺序排放,之间留了12个字节的空隙,偶也没有搞明白。

还有感觉不怎么爽的是 sizeof(a)和sizeof(&a)的大小都是12。。总之感觉不是那么完备

int (*p)[9];
p左边的*在这里不是取值运算符,而是一个声明符,它指出p是一个指针。而()括号是不能去掉的,如果去掉了,由于[]运算符优先级比*高,这样p就变成了一个指针数组,而不是指向数组的指针。

没有评论:

发表评论