ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

C语言 --- const 修饰指针

C语言 --- const 修饰指针 一、const 核心本质const 修饰的内存数据只读、不可写。变量与常量本质区别普通变量内存可读、可修改const 常量内存仅可读、禁止修改int a 5; a 1024; // 合法 const int b 5; b 360; // 报错常量不可修改二、指针的两层实体所有题的根源任意指针int *p a 永远包含两个对象p指针本身存地址控制「指针指向哪里」*p指针解引用代表目标内存的值控制「目标内存能不能改」终极判断规则 const 靠近谁谁就只读远离谁谁就可改。三、三种 const 指针精解最简记忆1. 常量指针const int *p/int const *p等价语义*p 只读p 可改不能通过指针修改目标值*p 100报错可以修改指针指向p b合法关键真相仅收窄指针权限。如果原变量没有 const原变量依然可以直接修改只是不能通过这个指针改。int a 5; const int *p a; a 666; // 合法原变量可改 *p 999; // 报错指针被const限制 p (int){20}; // 合法指针可换指向2. 指针常量int * const p语义p 只读*p 可改指针指向固定不可变p b报错可以修改目标内容*p 100合法强制规则定义时必须初始化地址。int a 5; int * const p a; *p 888; // 合法 p (int){20}; // 报错指针本身是 常量3. 双重只读指针const int * const p语义p、*p 全部只读不能改指向、不能改内容定义必须初始化全程只读四、一秒背诵口诀永久不混const 在 * 左边 → 内容只读指针可动常量指针const 在 * 右边 → 指针只读内容可动指针常量左右都有 const → 全都不动五、核心权限对照表极简版写法改指向(p)改内容(*p)名称const int *p✅ 可改❌ 不可改常量指针int * const p❌ 不可改✅ 可改指针常量const int * const p❌ 不可改❌ 不可改双重只读指针六、最高频考点const 权限匹配规则1普通变量 → const 指针合法内存可写指针主动降低权限安全合规。int a 10; const int *p a; // 合法收窄权限2const 常量 → 普通指针报错代码const int a 10; int *p a; // 编译报错丢弃const限定正确原理核心const int a的内存是纯只读内存。int*是可读写的高权限指针。把只读内存交给可写指针权限放大、丢弃只读限制。编译器直接拦截杜绝通过指针篡改常量的未定义行为。七、最终精华易错总结const int *p只是指针不能写原变量无 const 依然能直接改int * const p指向固定必须初始化权限只能收窄不能放大普通指针不能接 const 地址const int *p和int const *p完全等价。
返回列表