(c语言)对于数组名的相关理解

#include     //对于数组名的相关理解
//数组名确实能表示首元素的地址
//但是有2个例外
//1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
//2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址

int main()
{
    int arr[10] = { 0 };
    printf("%p\n",arr);   //000000B6F54FFE50        首元素地址
    printf("%p\n",arr+1);//000000B6F54FFE54      增加了4字节
    printf("........................\n");
    printf("%p\n",&arr[0]);  //000000B6F54FFE50            首元素地址
    printf("%p\n", &arr[0]+ 1);//000000B6F54FFE54        增加了4字节
    printf("........................\n");
    printf("%p\n", &arr);   //000000B6F54FFE50        整个数组的地址
    printf("%p\n", &arr + 1);//000000B6F54FFE78        增加了28(16进制)—>40字节(10进制)
    //二维数组对数组名的理解

    int brr[3][4];
    printf("%p\n",brr);        //0000001E411AFD18        首元素地址
    printf("%p\n",brr+1);    //0000001E411AFD28        增加了10(16进制)—>16(10进制)   
    //二维数组存储数据时,一行为一个元素,故加16(4个元素)

    printf("%d\n",sizeof(brr)/sizeof(brr[0]));    //输出二维数组的行数
    printf("%d\n",sizeof(brr[0]) / sizeof(brr[0][0]));    //输出二维数组的列号
    return 0;
}
//arr代表了数组的首元素地址,故与arr[0]的地址相同,而&arr取出了整个数组的地址,而整个数组的开头也是首元素地址,故上述三个相同
 

你可能感兴趣的:(c语言,算法,数据结构,c语言)