C-指针数组与数组指针

指针数组

  • 用于存放指针的数组
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
posted @ 2023-04-09 20:53  Khrushchefox  阅读(7)  评论(0编辑  收藏  举报