1.const介绍
C语言中提供了const关键字,const 中文意思是“恒定的”,从字面意思不难理解,它可以使其修饰的对象变得“恒定”,也就是不能改变。当开发者有意无意地改变被const修饰的对象时,编译器就会报错,使得代码的问题在编译阶段就能被发现,从而提高了开发的效率。
2.const修饰局部变量
int const n = 1;
const int n = 1;
上述两种形式都是正确的,都可以让局部变量n变得不可修改。
3.const修饰指针变量
在const修饰局部变量时,变量将变得不可修改。但如果绕过变量,使用局部变量的地址,就可以修改掉局部变量的值,这显然不符合我们的需求,所以想要使变量的值无法通过指针改变时,可以使用const修饰指针变量。它又分为一下几种情况:
int a = 1;
int b = 1;
int c = 1;
//const 在*的左边
int const* p1 = &a;
//const 在*的右边
int* const p2 = &b;
//const 在*的两侧都有
int const* const p3 = &c;
- 当const在*左边时,不能通过解引用指针变量来修改指针所指向的变量。
- const在*右边时,不能改变指针变量内存储的地址。
- const在*两侧都有时,既不能通过解引用指针变量来修改所指向的变量,也不能改变指针变量所指向的地址。
所以,如果我们想要一个局部变量彻底的无法被修改,需要在定义时使用const修饰变量,同时使用const在*左边修饰指向这个变量的指针变量。
4.const 修饰全局变量
与const修饰局部变量不同,const修饰全局变量时,既不能直接改变变量的值,也不能通过指针间接改变全局变量的值,这与全局变量在内存中的存储方式和const的底层原理有关。
5.const 修饰字符串常量
字符串常量存储在文字常量区,并且本身就不能修改,但为了防止有意无意的修改,使用const修饰字符串常量,这样在编译阶段就能发现代码的问题。
6.const 修饰函数的形式参数
函数的传参分为两种方式:
-
值传递:仅仅是传递变量中內容的一份临时拷贝,不会影响到原变量,所以一般情况下不需要使用const修饰。
例如:
void test(int x)
-
指针传递:将存有原变量地址的指针变量传递给函数,根据咱们上面const修饰指针变量的情况,同样可以将其分为三种情况:
- 修饰指针变量中存储的地址:
void test(int const* p)
- 修饰指针变量中指向的内容:
void test(int* const p)
- 修饰指针变量中指向的内容和存储的地址:
vodi test(int const* const p)
通过上面的学习,我们发现使用const修饰某一对象时,产生的效果万变不离其宗,就是修饰谁,谁就不能被修改! 认识到这一点,相信大家在使用const时可以游刃有余了~
完。