多维数组问题 int (*a)[] int []
今天做调整方阵这道题: 第一遍提交没有通过, 又gdb 重新温故了
交换二维数组中的两行数据:
void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; }
//这里必须加上[10], 不加的话,本机测试是可以通过的,但是OJ提交会报这个错误, 编译不会通过 void swap_first(int (*a)[10], int (*b)[10], int n) { for (int i = 0; i < n; i++) swap( &(*a)[i], &(*b)[i] ); }
调用:
swap_first(a+0, a+1, n);
这里需要注意 二维数组中的第一位的数据类型:
#include <stdio.h> int main(void) { int a[10][10] = {{1, 2, 3, 4}, {5, 6, 7, 8}}; int b[10] = {0}; return 0; } gdb --> start --> n ... > ptype(a) -- > int [10][10] ptype(a+0) --> int (*)[10] ptype( *(a+0)+1 ) --> int * p *( *(a+0)+1 ) --> 2 ptype(b) ---> int [10]
注意二维数组中操纵其中第一维是的方法,int (*)[10]
是指向数组的指针, 和他的纬度10。
以及去它中元素地址的方式: & (*a)[i]