const关键字

本文详细介绍了const关键字的作用及其在不同场景下的应用。包括阻止变量被改变、指针的使用、函数形参的修饰以及类成员函数的指定等。
const关键字
const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着“只读”readonly
规则:const离谁近,谁就不能被修改;
const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化。
本质:const在谁后面谁就不可以修改,const在最前面则将其后移一位,二者等效。
const关键字作用:
  1. 为给读你代码的人传达非常有用的信息,声明一个参数为常量是为了告诉用户这个参数的应用目 的;
  2. 通过给优化器一些附加信息,使关键字const也许能产生更紧凑的代码;
  3. 合理使用关键字const可以使编译器很自然的保护那些不希望被修改的参数,防止无意的代码修改,可以减少bug的出现;
const关键字应用
  1. 欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;
  2. 对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
  3. 在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值;
  4. 对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量;
  5. 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
### 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、付费专栏及课程。

余额充值