设有整型二维数组
int a[3][4] = { {3,2,1,5}, {11,22,33,5}, {14,15,15,3} };
比如A的首地址为1000 C语言允许把一个二维数组分解为多个一维数组来处理 因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的
#define PF "%d,%d,%d,%d,%d,\n"
void main()
{
static int a[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
printf(PF, a, *a, a[0], &a[0], &a[0][0]);
printf(PF, a + 1, *(a + 1), a[1], &a[1], &a[1][0]);
printf(PF, a + 2, *(a + 2), a[2], &a[2], &a[2][0]);
printf("%d,%d\n", a[1] + 1, *(a + 1) + 1);
printf("%d,%d\n", *(a[1] + 1), *(*(a + 1) + 1));
多维数组的指针变量
把二维数组a 分解为一维数组a[0],a[1],a[2]之后,设p为指向二维数组的指针变量。
int a[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
int(*p)[4];//如果希望在操作指针的时候和操作二维数组一样那么定义一个二维数组的指针 4代表二维数组的每一行的长度
p = a;//直接把一个一位数组给赋值进去
printf("%d",*(*(p+2)+2));//这样的话就 p代表的还是一个二位唯指针
注意如果用 int *p; 来存储的话 那么 p代表的就是一位数组的首地址而不再代表二维数组
system("pause");
}