C/C++中const限定符用法解析

C语言/C++语言中const限定符用法解析

如果一个变量被const修饰,那么它的值就不能再改变,与预编译指令#define相比,它有这些优点:

  1. 预编译指令只是对值进行简单的替换,不能进行类型检查
  2. 可以保护被修饰的东西,防止意外修改,增强程序的安全性
  3. 编译器通常不为普通的const常量分配存储空间,而是保存在符号表,这使它成为一个编译期间常量,没有了存储与读内存操作,使它效率也很高。

一、修饰局部变量:

  • const int a=10;
  • int const a=10;

注意:

  1. const常量要赋初始值;
 const int a=10;//ok
 const int a;//errror
  1. const常量不可修改值。
   const int a=10;//ok
    a=20;//error

二、指针和const限定符
常量指针:指针指向的内容都是常量
定义方式:

 const int* n;//n是一个指向int类型const对象的指针,const只是限定了p所指向的类型,而并非p本身,也就是说p不是const,在定义时不需要初始化
 int conct *n;

const int和int const意思相同。

注意:
1.常量指针说的是不能通过这个指针改变变量的值,但可以通过其他引用来改变变量的值。

int a=10;
const int*p=&a;
a=2;

2.常量指针指向的值不能改变,但指针本身可以改变,可以指向其他的值。

int a=10;
int b=20;
const int* p=&a;
p=&b;

指针常量:指针本身是一个常量,不能指向其他地址
int *const p;//p被const修饰,必须赋初始值
注意;指针常量指向的地址不能改变,但是地址中保存的数值可以改变,可以通过其他指向该地址的指针来改变

int a=10;
int *p=&a;
int* const n=&a;
*p=20;

区分常量指针和指针常量的关键在于 * 的位置,以 * 为分界线,如果const在 * 左边,就是常量指针;如果在 * 右边,就是指针常量。我们可以把 * 当作指针,把const当作常量,这样的话就方便理解记忆:int const *p;就是常量指针 int *const p;就是指针常量。

指向常量的常指针是以上两种的结合,指针指向的位置不能改变,也不能通过这个指针改变变量的值,但是依然可以通过其他普通指针改变变量的值

const int *const p;

三、修饰函数的形参变量
结合上面的指针常量和常量指针,const修饰函数也分三种情况。
1.防止修改指针指向的内容

void StringCopy(char *StrD,const char *strS);

其中StrD是输出参数,StrS是输入参数。给StrS加上const修饰后,如果函数体内的语句试图修改StrS的内容,编译器将指出错误。

2.防止修改指针指向的位置

void swap(int *const a,int *const b)

指针p1和指针p2指向的地址都不可被修改。
3.结合以上两种。
四、修饰函数的返回值

如果给以指针传递方式的函数返回值加const修饰,那么函数返回值(指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针。

const char * GetString(void);
char *str=GetString();//编译将会出错
const char *str=GetString();//正确

五、修饰全局变量
全局变量的作用域是整个文件,我们应该尽量避免使用全局变量,因为一旦有一个函数改变了全局变量的值,它也会影响到其他引用这个变量的函数,导致除了bug后很难发现,如果一定要用全局变量,我们应该尽量的使用const修饰符进行修饰,这样防止不必要的人为修改,使用的方法与局部变量是相同的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值