C语言中二维数组的数组名与 ”&数组” 的区别

(1) 测试代码 :

#include<stdio.h>

int main()

{

    int i, j;

    int a[5][5] = {{0,1,2,3,4},{5,6,7,8,9},{10,11,12,13,14},{15,16,17,18,19},{20,21,22,23,24}};

    for(i=0;i<5;i++)

    {

        for(j=0;j<5;j++)    

        {

            printf("%-3d ",a[i][j]);

        }

        printf("\n");

    }

    printf("\n\n");

    printf("a = %p\n",a);               // 000000000064FDE0

    printf("&a = %p\n",&a);           // 000000000064FDE0

    printf("a+1 = %p\n",a+1);       // 000000000064FDF4

    printf("&a+1 = %p\n",&a+1);   // 000000000064FE44

    return 0;

}

运行结果 :

 

分析 :

* "000000000064FDF4" - "000000000064FDE0" = 0x16(十六进制)

   (16转换为10进制即为20, 即五个整数的长度)

 即说明了二维数组数组名加一相当于地址加上一行数组的长度 .

* "000000000064FDE0" - "000000000064FE44" = 0x64(十六进制)

   (16进制转换为十进制即为100, 即整个数组的长度)

   即说明和一维数组相同”&数组名 + 1都是指向整个数组的地址的下一块区域

猜你喜欢

转载自blog.csdn.net/i_pangpang/article/details/80267688