二维数组

二维数组可以定义为
int arr[3][4] = {{1,2,3,4},{5,6,7,8,},{9,10,11,12}};
当然也可以这样定义
int arr[][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
int arr[][4] ={1,2,3,4,5,6,7,8,9,10,11,12}

但是arr[2][]或者arr[][]这两种都是错误的。

对二维数组来言,就相当于定义了一个矩阵,对于上述例子来言就相当是一个三行四列的矩阵,如图所示:

二维数组

在一维数组中呢
二维数组

定义一个长度为5的数组,定义一个整型指针,然后数组名+1指针移动,那么二维数组呢?

在二维数组中呢,我们得明白这一点,行优先 ,为了便于理解我们可以把二维数组看成独特的一维数组,

二维数组



我们把二维数组arr当做是由三个一维数组组成的,每个一维数组的长度为4,如:arr[2[1],arr[1]当做一维数组名来看待,那么arr[2][1]的意思就是一维数组arr[2]中的第2个元素,就是10
也可以这样理解:我们定义的二维数组是arr[3][4],那么第一行我们定义为arr[1],然后定义brr=arr[1],
比如说求brr[2]就是3,代换一下就是arr[1][2]=3;

对于一维数组来言,其数组名所指向的就是其首元素的地址。那么二维数组的数组名代表着什么?
我们假设二维数组的数组名也代表着其首元素的地址,但是现在二维数组的首元素不是单纯的的一个整型元素了,而是由四个整型元素所组成的一维数组。换句话说:二维数组名代表的是首行的首地址
既然 arr 是0行的首地址,那么arr+1就代表着1行的首地址,如图所示

二维数组