声明:int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
二维数组与行指针
二维数组名是一个行指针(常量)
printf("%d", a[0]); // 报错
printf("%d", *a[1]); // 输出5
定义行指针
int (*p)[4];
p = a;
printf("%d", p[1][2]); // 输出7
注意int* p[4]
是指针数组,而int** p是二重指针。只有int (*p)[4]
才是行指针。
作为函数参数,我们可以定义形式参数为int a[3][4]
或int a[][4]
或int (*p)[4]
二维数组与二重指针
使用二重指针可以建立二维数组
int val = 0;
int **arr = (int **)malloc(sizeof(int*) * 3); // 二维数组
for (int i=0; i<3; i++) {
arr[i] = (int *)malloc(sizeof(int) * 4);
for (int j =0; j<4; j++) {
arr[i][j] = val++;
}
}
然后我们可以把这个二重指针当作二维数组名来访问数组元素
void printArray2(int **arr, int row, int col){
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
我们得到结果如下:
0 1 2 3
4 5 6 7
8 9 10 11
注意:我们可以把这个二重指针当作二维数组名来使用,**但是二维数组名并不是二重指针,二维数组名是行指针。
int **p=a // 报错
网友评论