1、修饰局部变量
const int n=5;
int const n=5;
这两种写法都是一样的,都是表示变量n的值不能被改变了!
但在用const修饰前,一定要给变量初始化!否则就不能再进行赋值了。
2、修饰指针与指针常量
2.1 常量指针
常量指针是指针指向的内容是常量。
const int * n;
int const * n;
数据类型 + const + 指针 -> 常量指针
特点:指针的指向可以修改,但是指针指向的值不可以修改
修改常量指针的值的方法:
1.常量指针可以通过其他的引用来改变变量的值
int a = 10;
const int *p = &a; //用常量指针p来指向变量a
*p = 20; //错误,指针指向的值不可以修改
a = 20; //可以通过修改a的值来改变常量指针p的值
2.常量指针还可以通过修改指针的指向来改变变量的值
int b =20;
p = &b; //或者是让p指向另一个变量b,来实现修改p的值
2.2 指针常量
指针常量是指指针本身是个常量,不能指向其他的地址
int *const n;
数据类型 + 指针 + const -> 指针常量
特点:指针的指向不可以改,但是指针指向的值可以改
int a = 10;
int *const p = &a;
*p = 20; //正确,可以通过修改指针指向的值
p = &b; //错误,不可以修改指针的指向
2.3 指向常量的常指针
const int* const p;
是以上两种的结合,指针指向的位置不能改变,并且也不能通过这个指着改变变量的值。
但是依然可以通过其他普通指针改变变量的值。
3、修饰函数的参数
根据常量指针与指针常量,const修饰函数的参数也是分为三种情况:
1.防止修改指针指向的内容(用常量指针)
void func(int *p1, const int *p2);
如果函数体内的语句试图改变p2的内容,编译器将指出错误。
2.防止修改指针指向的地址(指针常量)
void func(int *const p1, int *const p2);
指针p1和p2所指向的地址都不能修改。
3.以上两种的结合
4、修饰函数的返回值(暂时看看不懂)
如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容就不能被修改,该返回值只能被赋给加const修饰的同类型指针。
const char * func(void);
char *str = func(); //将会出现编译错误
const char *str = func(); //正确用法
5、修饰全局变量
全局变量的作用域是这个文件,我们应该尽量避免使用全局变量。
因为一旦有一个函数改变了全局变量的值,它也会影响其他引用这个变量的函数,导致出了bug之后很难发现。
如果一定要用全局变量,我们呢应该尽量的使用const'修饰符进行修饰。
这样防止不必要的人为修改,使用方法与局部变量是相同的。