本篇核心知识指针数组与数组指针、复杂类型分析、const 与指针、运算符优先级 / 结合性、数组定义与指针访问、C 与 C const 差异一、运算符优先级与结合性概念优先级决定表达式运算顺序结合性决定同级运算执行方向直接影响指针、数组表达式的正确性。特性优先级排序()[]* 算术运算符 关系运算符 逻辑运算符 赋值运算符结合性()、[]左结合*、、const右结合影响忽视规则会导致数组元素访问、指针解引用错误是解题高频易错点。代码示例int arr[5] {1,2,3,4,5}; int *p arr; // 优先级[] * → *(p2) 等价于 p[2]正确访问元素 cout *(p2) endl; // 输出3相似概念比较优先级 vs 结合性优先级决定谁先算高优先级先执行。结合性优先级相同时决定从哪边算左→右 / 右→左。二、数组定义、初始化与指针访问概念数组是相同类型数据的有序集合指针可直接操作数组地址实现灵活访问。特性数组定义类型 数组名[长度]长度为整型常量不可用变量。数组初始化完整初始化int arr[5] {1,2,3,4,5}省略长度int arr[] {1,2,3}自动匹配元素个数部分初始化剩余元素默认补 0指针访问数组数组名 首元素地址常量指针不可修改等价访问arr[i] *(arri) *(pi)p 为指向数组的指针数组名本质const指针*const类型可访问修改元素不可赋值、自增自减。代码示例// 定义并初始化数组 int arr[5] {10,20,30,40,50}; // 指针指向数组首元素 int *p arr; // 指针访问元素 cout p[1] endl; // 20 cout *(p3) endl; // 40 // 错误数组名不可修改 // arr nullptr;三、指针数组 vs 数组指针必考概念指针数组是存指针的数组数组指针是指向整个数组的指针核心区别靠括号区分。特性1. 指针数组定义类型 *数组名[长度]本质数组元素为指针访问数组名[i]指针、*数组名[i]指向的值2. 数组指针定义类型 (*指针名)[长度]本质指针指向一个完整数组访问(*指针名)[i]数组元素特性指针 1 跳过整个数组长度数组指针特有代码示例// 1. 指针数组5个int*指针 int *pArr[5]; int a 1, b 2; pArr[0] a; pArr[1] b; cout *pArr[0] endl; // 1 ​ // 2. 数组指针指向int[5]数组 int arr[5] {1,2,3,4,5}; int (*p)[5] arr; cout (*p)[2] endl; // 3相似概念比较指针数组 vs 数组指针指针数组数组元素是指针[]优先级高于*。数组指针指针指向数组括号改变优先级()[]。四、复杂类型分析做题必考概念拆解多层指针、数组嵌套类型确定变量本质、指向类型及内存大小。特性核心规则去掉变量名剩余部分即类型优先级()[]*。拆解方法数组从外到内逐层降维指针逐个解引用直到基础类型int/char大小判断指针占 4/8 字节数组大小 元素个数 × 单个元素字节数。代码示例// 类型指向int[2][3]的指针 int (*p)[2][3]; cout sizeof(p) endl; // 8字节指针大小 cout sizeof(*p) endl; // 24字节int[2][3] cout sizeof(**p) endl; // 12字节int[3] cout sizeof(***p) endl; // 4字节int五、const 与指针超级重点概念const修饰指针限制指针指向或指向内容的修改分三种核心类型C 与 C 规则有差异。特性1. const 基础作用修饰变量使其只读定义必须初始化值后续不能修改。等价写法const int aint const a。2. const 指针三种形式①指向常量的指针const int *p/int const *p含义不能通过 p 修改指向的值指针指向可改用途保护被指向数据②指针常量int *const p含义指针指向不可改指向的值可改用途固定指针指向注释int型指针不能指向const int型数据地址、const int型指针可以指向int型数据但不能解析指针修改值③指向常量的指针常量const int *const p含义指针指向、指向的值均不可改完全只读3. C vs C 差异C严格类型匹配普通指针不能指向 const 变量编译报错C允许隐式转换普通指针可指向 const 变量不安全4. 变量初始化要求C 中const变量 / 指针必须初始化否则无默认值无法使用。代码示例int a 10, b 20; // 1. 指向常量的指针 const int *p1 a; // *p1 100; // 错误不能修改值 p1 b; // 正确可改指向 ​ // 2. 指针常量 int *const p2 a; *p2 100; // 正确可改值 // p2 b; // 错误不能改指向 ​ // 3. 指向常量的指针常量 const int *const p3 a; // *p3 200; // 错误 // p3 b; // 错误相似概念比较三种 const 指针const int *p值只读指向可变保护数据。int *const p指向只读值可变固定地址。const int *const p全只读最严格。六、数组复制与修改权限概念数组作为特殊变量复制和修改受常量属性限制本质为常量指针。即int * const类型指向int指向的数据可修改自己不能被修改特性复制数组整体不可直接赋值复制需遍历元素或用内存函数。修改数组名是const指针不可修改自身地址但可修改数组内元素值。权限本质数组具有只读地址、读写元素的权限。代码示例int arr1[3] {1,2,3}; int arr2[3]; // 错误数组不可直接赋值复制 // arr2 arr1; // 正确遍历复制元素 for(int i0; i3; i) arr2[i] arr1[i]; // 正确修改元素值 arr1[0] 10;