通过数组名访问数组元素的一些常见小计算

数组名的含义有以下几种情况:

1.数组名在如下情况表示整个数组:

(1);在定义数组的同一个函数,求sizeof(arr)

(2):在定义数组的同一个函数,&arr+1

2.其他情况下数组名表示数组首元素的地址

我们先定义一个一维数组:

int main()

{

int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//
聚合类型 初始化一部分剩余部分为0;

printf(“%x\n”, arr);//
代表的是数组首元素的地址,

printf(“%x\n”,&arr[0]);//
对首元素取地址,与arr相同

printf(“%x\n”, &arr);//
与前两种情况相同

printf(“%x\n”, &arr + 1); //
跑整个数组

printf(“%x\n”, arr + 1);//
首元素地址加1,即第二个元素的地址

printf(“%x\n”, &arr[0] + 1);//
与前一种情况相同

printf(“%d\n”, *arr + 1); //  2
对首元素的地址解引用

printf(“%d\n”, *(arr + 1)); //  2,
先对首元素地址加1在进行解引用

return 0;

}

对于二维数组来言:把每个二维数组里的一维数组看成一个元素

int main()
{
int arr[3][4] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, 8, 9, 10 };//三行四列的一个二维数组
printf(“%x\n”, arr); //  数组的首地址
printf(“%x\n”, &arr + 1); // 加整个二维数组
printf(“%x\n”, arr + 1);  // 加一行

printf(“%x\n”, arr[0]);//第一个一维元素的首元素的地址,也是二维数组首元素的地址
printf(“%x\n”, &arr[0] + 1); // 加一行
printf(“%x\n”, arr[0] + 1); // 第一个一维元素的首元素的地址+1,即加一个元素

printf(“%x\n”, arr[0][0]); // 第一行第一个元素的值
printf(“%x\n”, &arr[0][0] + 1); // 第一行第二个元素的地址
printf(“%x\n”, arr[0][0] + 1);  // 值加1

}

这里需要注意的是二维数组的首地址也是二维数组里面的第一个一维数组的首元素的地址

    原文作者:nifeigea
    原文地址: https://blog.csdn.net/nifeigea/article/details/80465935
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞