这两句是等效的
int main(void) { int buf[2][3] = { {1,2,3},{4,5,6} }; //int*p[3];指针数组 int(*p)[3];//定义了一个指针,指向int [3]这种数据类型,指向二位数组的指针 p = buf;//p指向了二维数组中的第一行 p++;//指向了第二行 printf("%d\n",sizeof(p)); printf("%d,%d\n",p,p+1); //位移了1 * sizeof(int [3]) system("pause"); return 0; } int main(void) { //不允许使用数据下标,只能通过指向二位数组的指针求出数组中每行和每列的平均值 int buf1[3][5] = {{2,4,5,6,2},{2,3,4,5,6},{5,4,6,3,2}}; for (int i = 0; i < 3; i++) { for (int j = 0; j < 5; j++) { printf("%d ",buf1[i][j]); } printf("\n"); } printf("------------------------\n"); int(*a)[5]; a = buf1; printf("%d ",a); printf("%d ", &buf1[0][0]); printf("%d ", *(a[2])); printf("\n"); system("pause"); return 0; }