#includeint main(void) { //1.数组名字是首元素地址 //2.p指向一个变量的地址,*p就是这个变量本身的值 //3.(*p + n) = p[n] int a[2][3] = { { 5,4,9},{1,9,3} }; //1. int(*p)[2][3] = &a; // *p == a; *p == a; printf("%d\n", (*p)[1][1]); //9 //printf("%d\n", p[1][1]); //错误 //2. int(*k)[3]= &a[0];//or = a or = &a[0] or k = a; //k == a ; //数组指针,指向含有三个元素的一维数组 a == &a[0]; k == a; printf("%d\n", k[1][0]); //1 printf("%d\n", (*k )[4]); //9 printf("%d\n", (*(k + 1))[1]);//9 (*(k+n)[m] == a[n][m] printf("%d\n", *(k[1] + 1)); //9 *(k[n]+m) == a[n][m] printf("%p\n", &a[0]); //000000A0A42FF5B8 printf("%p\n", a); //000000A0A42FF5B8 //3. //(1) int* j = &a[0][0]; // 5 4 9 1 9 3 // | | | | | | // j j+1 j+3 j+5 地址 // *j *(j+1)*(j+3)*(j+5) 本身 printf("%p\n", j + 3); //000000BD236FF5D4 printf("%d\n", *(j + 3)); //1 //(2) int* i = &a[1][1]; // 5 4 9 1 9 3 // | | | | | | // i-4 i-1 i i+1 地址 // *(i-4) *i *(i+1) 本身 printf("%p\n", i - 1); //000000E0A4AFF944 printf("%d\n", *(i - 1)); //1 //4. int* q[2]; //指针数组,一个数组内存放两个指针变量 q[0] = a[0]; //相当于赋值 q[1] = a[1]; //相当于赋值 printf("%p,,%p\n", q[1], a[1]); //0000006BDE57FB44 ,,0000006BDE57FB44 printf("%d,,%d\n", q[1][1], a[1][1]); //9 ,, 9 printf("%d\n", *(q[1] + 2)); //3 printf("%d\n", *(*(q + 1) + 2)); //3 printf("%d\n", (*(q + 1))[2]); //3 }