c语言const关键字误区与使用场景


写这篇文章的原因

看到很多人(某些“面试官,博客主,八股文作者”)说const是修饰常量的。这是一个讹传讹的错误结论。顺便就写一下const和指针的混合用法。

一、const误区

1.1为什么说“const是修饰常量的”是错的呢

以最简单的用法为例:

 int  a = 10;//定义了一个int类型的变量a等于10。
 const  int  b = 10;//定义了一个int类型的变量b等于10,并用关键字const修饰。

再举个例子:机器只会给变量分配内存,那么我们去看一下b是否被分配内存了,答案是b被分配内存了。
以上两个例子都可以证明**“const是修饰常量的”是错的**。

1.2结论

const修饰的是变量,修饰的变量只有只读权限,不能被更改,是只读变量。

二、const的使用场景

2.1.const修饰普通变量(无指针)

有两种方法:

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

这两种方法都是对的,没有区别。都是修饰变量a,a是只读变量,不可以被修改。

2.2const修饰指针

当把指针和const联系到一起,就不一样的,其实这里考察的知识点是对指针的理解,而不是const。上代码:

const int *p = &a;//第一种
int * const p =&a;//第二种
const int const p = &a; //第三种

第一种情况:const修饰的是 * ,所以指针的指向可以改,但指针指向地址上面的值是不可以被更改的。

int a = 10;
int b=20;
const int p;//可以不初始化,因为指针是可以变化的
p = &a;//正确,指针是可以变化的
p= &b;//正确,指针的指向是可以改的
*p = 30;//错误,指针上面的值是不可改变的

第二种情况:const修饰的是p,p是int指针类型的,所以p的指向是不可以变得,但指针指向地址上面的值是可以改变的。

int a = 10;
int b = 20;
int * const p;//错误,指针p不能更改,初始化必须要指向该指向的地址
int * const q = &a;//正确,初始化指针,指向a的地址
q = &b;//错误,指针p不可以更改指向
*q = 30;//正确,指针指向地址上面的值是可以被改变的

第三种情况:const修饰了*和p,所以指针的指向不能更改,指向地址的值也是不能更改的,也就是第一种和第二种的结合。

总结

const修饰的是变量。变量被const修饰之后就变成了只读变量。
后面介绍的const和指针一起用的方法,其实主要考察的还是指针。如果懂得指针的原理其实就很好理解。
总的来说,就是看const修饰的直接变量。只有被修饰的直接变量才是只读的。


所写内容如有问题,请帮忙指出,非常感谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值