二维数组本身就是一维数组,并且是连续的地址空间,为了使思路更清晰,采用转换的思想,即二维数组等价于父子数组。(向Mr.陈学习,陈哥YYDS)
二维数组即父子数组。 arr[ ][4 ] = { {1,3,7,8 } , { 2,8,10, 6} , { 0,0,0,0 } };
arr是父数组名,即相当于数组指针,arr+1相当于跨过整个数组/整行元素,在OS中一个数(int型时)的内存是4字节,即跨过4n个地址,跨过n个数,跨度大。
arr[ 0 ]是子数组名,arr[0]+1相当于跨过整行元素中的一个元素,跨度小。
常见的举例:
arr[ i][ j] =p[i ] [j ]————偷懒即可。
arr[ 2 ] = *( arr+2)
父 arr arr+1 跨行
子 arr[0] arr[0]+1 跨单个元素
父—需要借助*符号——子 *( arr+0)+1
遍历二维数组:
即子数组的地址和内容
&arr[i] [j] arr[i] [j]
arr[ i]+j * ( arr[ i]+j )
* (arr+i)+j * ( * (arr+i)+j )
二维数组的首地址 是数组名,也是首个元素的地址(首个元素是一个一维数组,OS系统自动取一维数组里的第一个元素的地址)
arr=arr[ 0] =&a[ 0][ 0]
遍历二维数组的思想
A.二维数组是一维数组,用arr[0][0]逐个单个元素访问二维数组
B二维数组是父子数组,用 数组指针的思想去访问二维数组