#include<stdio.h>
//二维数组地址的区别
int main()
{
int arr[10][10];
//
printf("%p %p %p\n", arr, arr[0], &arr[0][0]);//打印地址相同
// 代表数组的一行 代表一个元素 代表一个元素
printf("%p %p %p\n", arr + 1, arr[0] + 1, &arr[0][0] + 1);
// 代表整个数组 代表数组的一行 代表一个元素
printf("%p %p %p\n", &arr + 1, &arr[0] + 1, &arr[0][0] + 1);
return 0;
}

注意:地址是16进制显示
由上图可知:
- arr,arr[0] 和 &arr[0][0] 地址相同
- arr+1 和 &arr[0]+1 一样,地址往后走一行
- &arr+1 地址往后走一整个数组
- &arr[0][0]+1 和 arr[0]+1 地址往后走一个整形
该代码示例展示了在C语言中,二维数组arr、arr[0]和&arr[0][0]的地址相同,因为它们都指向数组的起始位置。而arr+1相当于移动到下一行的开始,&arr+1则移动到整个数组的下一个位置,&arr[0][0]+1和arr[0]+1则分别向前移动一个整型元素的大小。这揭示了二维数组在内存中的存储方式。
2274

被折叠的 条评论
为什么被折叠?



