数组和地址的关系

如下代码:   

    #include <stdio.h>

       int main()

       {    int a[3]={0,1,2};

            printf("%p", &a[0]);  //   %P输出地址。&a[0]表示数组的首元素地址

            printf("%p", &a);     //    &a表示输出数组的地址

            printf("%p", a);       //     a是数组名,输出也代表数组的首元素地址

        }

  输出为0xbf860fb8 
            0xbf860fb8 
             0xbf860fb8 

   结果三个输出的代码是相同的,即对于一维数组而言,这三者的输出是相同的。

但是  如果将三个都加一 

           

             printf("%p", &a[0]+1);  

            printf("%p", &a+1);     

            printf("%p", a+1);

结果为

            0xbf860fbc
            0xbf860fbc
            0xbf860fc4

      这是为什么呢?

        &a[0]+1   的意思是a[0]往后一个变量的地址,即a[1]的地址,第三个输出也是如此,a+1根据结果也是如此0xbf860fbc,与上述的a[o]差了一个int的步长4。

        而&a+1是输出下一个数组的地址,所以与上面的地址差了一个数组的步长,即3*4=12

        


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值