#includeint main() { int mat[2][3] = { {1,2,3}, {4,5,6} }; int (*p)[3] = mat; int i = 1; int n = 3; int j = 1; //int **p2 = mat;//cannot convert 'int (*)[2]' to 'int**' printf("%d ", (p[i][j])); printf("%d ", (*(p+i))[j]); printf("%dn", (*(mat+i))[j]); printf("%d ", *(p[i] + j)); printf("%d ", *(*(p+i) + j)); printf("%dn", *(*(mat+i) + j)); printf("%d ", *(p[0] + i*n + j)); printf("%d ", *(*p + i*n + j)); printf("%dn", *(*mat + i*n + j)); while(1);//方便在vs code上观察结果 return 0; }
输出结果:
5 5 5 5 5 5 5 5 5解释
- 静态二维数组的数组名是一维数组指针,指向第一行(因此又称行指针)。
- 静态二维数组申请的栈空间是连续的。
- 动态二维数组是二级指针,一维数组指针的一维数组。
- 静态数组和动态数组
- 数组指针和指针数组的区别; 二维数组和指针的关系
- c中动态与静态二维数组



