以下内容为自学笔记缺乏严谨性,如有错误和不足请大佬指正
(1)二维数组的存储本质?
二维和多维数组的存储空间也是连续的,可以用指针偏移证明
(2)二维数组名代表什么?
二维数组名是整个数组的首地址,也是数组第0行的首地址,也是数组第0行第0列元素的首地址
数组名代表的是离自己最近维度的地址他实际代表的是第0行元素的首地址,对二维数组名进行*操作得到的是数组第0行的空间
(3)二维数组名+1与&二维数组名+1的区别?
二维数组名代表的是第一行元素的首地址,+1偏移的是数组一行的空间大小
&二维数组名代表的是整个数组的首地址,+1偏移的是整个数组空间大小
(4)多维数组的空间访问原理?
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
得到某行的首地址
arr arr+1 arr+2 sizeof(arr+1)==4(指针大小)
得到某行的存储空间
*(arr+1) *(arr+2) sizeof(*(arr+2)) == 16 arr[1] arr[2] sizeof(arr[2]) == 16(空间大小)
得到行内某一列的地址
*(arr+1)+0 *(arr+2)+1 arr[1]+0 arr[2]+1 sizeof(arr[1] + 0)==4(指针大小)
得到行内某一列的存储空间
*(*(arr+1)+0) *(*(arr+2)+1) arr[1][0] arr[2][1] sizeof(arr[2][1])==4(空间大小)