C语言中const修饰普通变量与指针的用法有什么区别
const修饰普通变量与指针的用法差异
两者的约束对象完全不同,具体区别如下:
1. const修饰普通变量
- 作用是将变量标记为只读,必须在声明时完成初始化,后续不允许修改变量的值
- 你给出的示例
const int var;本身存在语法问题,未初始化的const普通变量会直接触发编译错误,正确写法为const int var = 10; - 后续如果尝试修改该变量,比如执行
var = 20;,编译器会直接报错
2. const修饰指针
const修饰指针时,约束对象由const和*的相对位置决定,核心判断规则为:const位于*左侧时约束指向内容,位于*右侧时约束指针本身。
你给出的示例const int *ptr;属于第一种场景,三种常见的const指针用法如下:
const int *ptr(等价于int const *ptr)
仅限制指针指向的内容,不允许通过该指针修改指向的内存值,但指针本身的指向可以修改,示例:int num1 = 10, num2 = 20; const int *p = &num1; // *p = 30; 编译报错:不能通过p修改指向的内容 p = &num2; // 合法:修改p的指向为num2的地址int *const ptr
仅限制指针本身的指向,声明时必须初始化,后续不能修改指针的指向,但可以通过指针修改指向的内容,示例:int num1 = 10, num2 = 20; int *const p = &num1; *p = 30; // 合法:修改num1的值为30 // p = &num2; 编译报错:不能修改p的指向const int *const ptr
同时约束指针的指向和指向的内容,两者都不允许修改
内容的提问来源于stack exchange,提问作者Thilak
相关产品推荐
相关产品推荐

