指针数组
- 用于存放指针的数组
int a = 1, b = 2, c = 3;
int* arr[3] = {&a, &b, &c};
// arr[0] == &a
// *arr[0] == a
int** p = arr;
// *p == arr[0] == &a
// p[0] == arr[0] == &a
// *(p+1) == arr[1] == &b
// **p == *arr[0] == a
// *p[0] == *arr[0] == a
// **(p+1) == *arr[1] == b
数组指针
- 用于指向整个数组的指针
int a[3];
int (*p)[3] = &a;
// p = &a;
printf("%d, %d, %d", *(*p), *(*p+1), *(*p+2));
// (*p)[0], (*p)[1], (*p)[2]
// 1, 2, 3
p, &a 代表的是整个数组的首地址,指向了整个数组
*p 是指向首元素的指针, 表示所指向数组中首个元素的地址
- 数组指针可以处理二维数组
int arr[][3] = {{1, 2, 3}, {4, 5, 6}}; // 2*3
int (*p)[3] = arr;
// 不需要对二维数组取地址, 此时数组指针指向的是二维数组中的第一个元素(数组)
printf("%d", *(*p+1)); // 2
printf("%d", *(*(p+1)+2)); // 6
printf("%d", p[1][2]); // 6
标签:arr,指向,int,数组,printf,指针
From: https://www.cnblogs.com/khrushchefox/p/17301043.html