简单总结const的用法

1 介绍

const关键字是constant的缩写,翻译为常量、常数。在C语言中const的作用很强大,它可以修饰变量、数组、指针、函数参数等。

1.1const修饰变量

const修饰变量,表示希望此变量只读性,防止被直接直接修改。

图一
通过上图可以发现const 修饰的变量,随后试图修改num的值,结果出现红色波浪线,编译器提醒我们:表达式必须是可修改的左值。所以,我们得出:const修饰的变量,不能被修改。
const修饰的变量一定不能被修改吗???
回到不一定
分析:
图二
通过上图我们发现num的值被修改了,通过指针可以间接的修改const修饰的变量。但是运行时会出现警告:warning C4090: “初始化”: 不同的“const”限定符。是因为num类型是const修饰,但是p是整型指针类型,类型不同。所以通过下面强转就没警告了。
图三
总结:const修饰的变量不能被直接修改

1.2 const修饰数组

图四
上图表示const修饰的数组也不能被修改。通过上面1.1const修饰变量的分析,同理也联想到:指针是否可以修改数组的内容。结果如下:
图五
不难发现,指针可以修改。同样运行时程序出现了警告:warning C4090: “初始化”: 不同的“const”限定符和1.1节出现结果一样,经过强转后:
图六
同样没有的警告出现了。

总结:const修饰数组时,其值不能被直接修改

1.3 const修饰指针

此部分分为两种情况去分析:

  1. const int *p =& a;
    图七

此时,通过上图容易发现const修饰 指针指向的内容,所以*p(指针指向的内容不能被修改),但指针本身是可以被修改的。

  1. int * const p=&a;

图八
此时,const修饰的是指针的本身,所以指针本身不能被修改,但是指针所指向的内容可被修改

1.4 const修饰函数参数

const修饰函数参数,对参数起到限定的作用
图九
图十
总结:const修饰函数参数,本质上和修饰变量和指针一样。表示其值不能被直接修改。
图十一
通过上图又发现指针也能修改其值。

2 const对程序的影响

图十二
上面图片代码在运行中是不能运行成功的。因为字符串在内存中存在字符常量区,不可被修改。但该程序出错方式不是很明显,通过下面代码让错误提前出现:
图十三
可以发现,在*p下面出现了红色波浪线,让上述的错误提前出现,避免程序在运行时出错。
总结:编译器可以对const修饰的变量进行合理性检查,让错误提前出现。

但是有个问题先提出来:观看下图,可以发现字符串被修改了,究竟为什么呢?先思考一下???
图十四
具体分析可以查看:https://www.cnblogs.com/lifeng-blog/p/7561024.html这篇博客介绍了为什么。

3 总结

通过这篇博客,我对const修饰变量、数组、指着和函数参数进行了归纳总结。总体来说有几个点需要注意:

  • const修饰变量,不能被直接修改
  • const修饰指针指向的内容时(const int * p=&a),指针指向内容(*p)不能被修改,但指针本身§可以被修改。
  • const修饰指针本身时(int * const p =&a),指针指向的内容(*p)可以被修改,但是指针本身(p)不能被修改。
  • const 修饰字符串 (const *p=“abcd”;)和(const p[]=“abcd”;)这两种情况的分析,前者字符串不能修改,后者字符串可以修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值