数组和地址的关系

xiaoxiao2021-02-28  52

如下代码:   

    #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

        

 

转载请注明原文地址: https://www.6miu.com/read-82549.html

最新回复(0)