const关键字的简介

const关键字的简介

const在C语言中是一个关键字,它的作用是限定一个变量不允许被修改。当一个变量被const限定时,这个变量就是一个只读变量,编译器在内存中开辟一个地方来存放它的值,只过过这个变量由编译器限定不允许被修改。当一个变量被const修饰时虽然它的值不能被修改,但是它和常量是有区别的,常量是存放在内存中的只读区域,这就是常量不能被修改的原因。
下面我们来看看以下几个例子:

1. 普通情况
const  int  a;
int  const  a;

这两个语句是一样的,const关键字的位置和数据类型的位置的前后没影响,它只修饰a这个变量,它和其他的修饰符一样,例如C语言中的long,short,unsign,double等等,它们也和数据类型的位置可以随意调换。这两个语句的意思是限定a的值是一定的,不能再被改变(貌似有常量的性质),比如不可以对它进行赋值。a一般在定义是进行初始化,以后便不能在改变了。

2.当有指针时,我们要对const的使用特别注意,看一下例子
const   char *p;
char  * const q;
p++;
q++;//这句是错误的//

为什么呢?因为const char p;限定的是p不可变,也就是p指向的内存单元里的值是不可以变化的,但是指向是可以变化的,所以p++是对的。但是char const q;这句限定了q这个指针式不可变的,即指向不可变,也就是说他一直指向固定的内存单元,但这个内存单元里的值是可以改变的,所以q++是错的,但是 ( * q ) ++ 是对的;那么怎么判断是指针指向不可变还是值不可变呢?const只修饰其后的变量,按指针运算符”“从右至左运算判断;例如

int const*const  a;

怎么判断呢?从右至做,先是a被const限定,所以a是不可变的,因为a是指针,即指向不可变,然后再向左看是(*const a),*a被第2个const限定,a是指针指向的内存单元的值,所以这个值不可变。总结来说就是: const在 * 的左边,则指针指向的变量的值不可变;在的右边,则指针的指向不可变。简记为“左定值,右定向”。在对指针进行限制时最好要同时赋初值,以防止指针指向不允许 访问的内存或不存在的内存(野指针)的出现,造成程序崩溃。

3.当const 和typedef在一起使用时将会产生奇怪的反应,看如下例子:
typedef  int* a;
const  a  b;

此处的b该怎么解释?是解释成const int* b;还是int * const b;正确答案是第二种,为什么是第二种呢?因为const a b这句中a是一种类型,const要修饰的是b,表示b是只读,所以应该是int* const b;为什么不会被解释成第一种呢?通常情况下我们潜意识里做了一个文本扩展,把a替换成int*,注意这是及其错误的!当const 和typedef配合的时候要注意这个问题 !

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值