
【C语言】指针数组 VS 数组指针 原来这么简单 - 知乎数组的名字就是数组首元素的指针。判断指针类型指针口诀先右后左由近及远括号优先。从变量名看起指针数组int *p[5] 有5个指针的数组理解p1 先于[ ]结合表示一个数组这个数组中有 5 个元素这 5 个元素都是指针它们指向的是 int 型数据所以p是数组指针。int a1,b2,c3,d4,e5; int *arr[5]{a,b,c,d,e};//数组里面全部是指针 print(a的值是%d\n,arr[0]); print(b的值是%d\n,arr[1]); print(c的值是%d\n,arr[2]); print(d的值是%d\n,arr[3]); print(d的值是%e\n,arr[4]);数组指针int (*p)[5] p是一个指针指向一个长度为 5 的int数组。理解小括号让 p 与 * 结合表示 p 是一个指针这个指针再与[ ]结合表示指针指向了这个数组数组中有 5 个元素每一个元素的类型是 int 型。//1、定义数组指针 int arr[5] {1,2,3,4,5}; int (*p)[5] arr; // p 指向整个数组 arr //2、 以下三者都得到 1arr[0] arr[0]; (*p)[0]; // p 先解引用得到数组再取下标 // 3、定义数组指针类型别名 typedef int (*Ptr)[5]; // ptr 是一个类型 Ptr ptr; // 等价于 int (*p)[5]因其是指向数组的指针首先它是一个指针先使*解引用出数组的地址然后就有下面的访问形式//p先解引用得数组退化为首元素指针再解引用 (*p)[1]; // ✅ 访问第二个元素 *(*p 1); // ✅ 访问第二个元素 (*p)[0]; // ✅ 访问第一个元素 **p; // ✅ 访问第一个元素可以理解为数组的指针(*p)就是解引用后就是数组的首地址。