博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数组指针

Posted on 2008-05-27 22:54  arowana  阅读(258)  评论(0编辑  收藏  举报
众所周知,数组名代表了数组的首地址,但是如果对数组名取地址又代表什么呢,答案是还是代表数组的首地址,那么他们之间的区别是什么呢。答案是:一个是指向数组元素的指针,一个是指向数组的指针。
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.
至于为什么数组d,a的地址没有按顺序排放,之间留了12个字节的空隙,偶也没有搞明白。
 
还有感觉不怎么爽的是 sizeof(a)和sizeof(&a)的大小都是12。。总之感觉不是那么完备。