将二维数组作为参数,传递给函数时常有两种形式:
sum(int (*arr)[4],int size);
sum(int arr[][4],int size);
这里的 arr 实际上是一个数组指针(即 & 数组名),arr 首先和 * 结合,因此 arr 首先是一个指针类型变量,然后这个指针类型变量指向的是一个由四个 int 类型变量组成的数组,即一维数组指针,而非指向一维数组首地址的数组名。而这里的 size 即是二维数组的行数。
而在使用二维数组的时候直接使用:arr[r][c]
arr[r][c]=*(*(arr + r) + c);
arr 表示一维数组指针,指向由四个int组成的数组,也即二维数组的第一行
arr + r 则是指向二维数组的第 R 行数组指针,这一行同样是四个 int 类型组成的数组
*(arr + r)则即解引用行指针,即表示的是第 R 行(一个数组由四个 int 类型变量组成),同时也表示指向这个由四个int类型组成数组的第一个元素的地址
*(arr + r)+ c 则表示指向 R 行这个由四个int类型组成数组中第 C 个元素的地址
*(*(arr + r)+ c) 也即arr[r][c] 则即解引用上述指向 C 的指针,也即C元素