int arr[3][4]={
{1,3,5,7}, ---> arr[0] 第0个一维数组
{9,11,13,15},---> arr[1]
{17,19,21,23}---> arr[2]
};
arr代表指向第0个元素的地址 &arr[0] 第一行元素的地址 行指针
arr+1代表指向第一个元素的地址 &arr[1]
arr+2代表指向第二个元素的地址 &arr[2]
arr+i代表指向第i个元素的地址 &arr
arr[0]代表arr[0][0]的地址
arr[0]+1代表arr[0][1]的地址
arr[0]+2代表arr[0][2]的地址
arr[0]+3代表arr[0][3]的地址
&arr == arr == &arr[0] == arr[0] == &arr[0][0] ---> 数组的首地址
&arr --> 整个数组的地址 +1(越界)
arr --> 指向数组第0行的地址 &arr[0]
&arr[0] --> 指向数组第0行的地址
arr[0] --> 第0行的内容/二维数组的第一个一维数组 指向这个一维数组第一个元素的地址 == &arr[0][0]
&arr[0][0] 整个二维数组第1个一维数组里面第一个元素的地址
int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
访问 第一行的第0个元素地址表示:
a + 1 = &a[1] = a[1] = &a[1][0] = *(a + 1)
获取第一行的第0个元素值的方式:
*a[1] = a[1][0] = **(a + 1) |