const关键字

const关键字

const 限定一个对象为只读属性。


一级指针:

  • (1)const char p 限定变量p为只读。这样如p=2这样的赋值操作就是错误的。

  • (2)const char *p p为一个指向char类型的指针,const只限定p指向的对象为只读。这样,p=&a或 p++等操作都是合法的,但如*p=4这样的操作就错了,因为企图改写这个已经被限定为只读属性的对象。

  • (3)char *const p 限定此指针为只读,这样p=&a或 p++等操作都是不合法的。而*p=3这样的操作合法,因为并没有限定其最终对象为只读。

  • (4)const char *const p 两者皆限定为只读,不能改写。

二级指针:

  • (1)const char **p p为一个指向指针的指针,const限定其最终对象为只读,显然这最终对象也是为char类型的变量。故像**p=3这样的赋值是错误的,而像*p=? p++这样的操作合法。

  • (2)const char * const *p 限定最终对象和 p指向的指针为只读。这样 *p=?的操作也是错的。

  • (3)const char * const * const p 全部限定为只读,都不可以改写。

### const 关键字的使用 - **修饰变量**: ```c const int num = 10; ``` 这里 `const` 修饰 `num` 变量,`num` 成为常量,其值在初始化后不能被修改。如果尝试修改 `num` 的值,编译器会报错。 - **修饰函数的参数**: ```c void func(const int param) { // 在函数内部不能修改 param 的值 } ``` 在这个函数中,`const` 修饰了函数的参数 `param`,意味着在 `func` 函数内部不能修改 `param` 的值,起到保护参数的作用 [^3]。 - **与指针变量的搭配**: - **指向常量的指针**: ```c const int *ptr; ``` `ptr` 是一个指向常量的指针,不能通过 `ptr` 来修改它所指向的值,但 `ptr` 本身可以指向其他地址。 - **指针常量**: ```c int * const ptr; ``` `ptr` 是一个指针常量,`ptr` 本身的值(即所指向的地址)不能被修改,但可以通过 `ptr` 修改它所指向的值。 - **指向常量的指针常量**: ```c const int * const ptr; ``` `ptr` 既不能指向其他地址,也不能通过它修改所指向的值。 ### const 关键字的作用 - **提高程序的安全性**:在函数参数中使用 `const` 可以防止函数内部意外修改传入的参数,保护数据的完整性。例如,当函数的参数是指针时,使用 `const` 可以避免函数内部对指针所指向的数据进行修改 [^3]。 - **增强代码的可读性**:使用 `const` 可以明确变量的使用方式,让其他开发者更容易理解代码的意图。例如,当看到一个函数的参数被 `const` 修饰时,就知道该参数在函数内部不会被修改。 - **替代 `#define` 定义常量**:虽然单独定义 `const` 变量没有明显的优势,完全可以使用 `#define` 命令代替,但 `const` 有类型检查,而 `#define` 只是简单的文本替换。例如: ```c const int MAX = 100; #define MAX_VALUE 100 ``` `const` 定义的 `MAX` 有具体的类型 `int`,而 `#define` 定义的 `MAX_VALUE` 只是一个简单的文本替换,没有类型信息。 ### 相关知识 在C语言中,`const` 修饰的变量在编译时通常会被分配内存空间,并且在程序运行期间其值不能被修改。不过,在某些情况下,编译器可能会对 `const` 变量进行优化,将其值直接嵌入到代码中。另外,`const` 修饰的变量在不同的作用域中有不同的生命周期和可见性,遵循C语言的作用域规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值