C语言和C++中的const

首先从C语言中的const开始说:

在C语言中,const关键字是指定义一个常量,比如:

以上两种定义方式是等价的,都是指定义一个值为10的常量a。

 

然后说引入指针定义之后的变化:

举例const int * b;

其意思是定义了一个指针b,这个b指向的是一个变量或者常量(皆可,假设指向a吧),那么也就是说其中b的指向可以变,但不可以通过指针b来修改a的值。(注意:面下程序中b是常量,a是指针)

 

举例int * const b;

其意思是定义了一个指针b,这个b指向的是一个变量或者常量(皆可,假设指向a吧),那么也就是说其中b的指向不可以变,但可以通过指针b来修改a的值。(注意:面下程序中b是常量,a是指针)

 

其实从排列组合可以发现,显然const int *三者不是只有这么两种排列

其中

无 * int const、* const int 、const * int写法

而int const * 与const int * 作用一致,

另外,const int * const就是既不能改变指针指向,也不能通过其改变所指向的变量的值。

 

 

而从之前int const *对于改变const量的值时的运行结果我们也会发现即使是const的值依旧可以使用指针来修改。接下来我们运行一个更一般的程序。

这里我们可以看见即使是号称常量的const也是可以改变的。那么int arr[const量]的时候也自然会出错。

 

 

然后我们来看一个C++程序

可以发现a的值不能修改,而*p的值却改变了。

在C语言中定义一个const量之后会在常量区开辟栈空间。而C++则是有一个符号表,将常量的名字(比如a)和它的值(比如10)放在一个表格里,一一对应,相应的a也就没有地址。如果对一个常量取地址(以上面的程序*p为例),编译器会临时开辟一个空间temp(假如它叫temp吧),让这个指针存放这个临时空间的地址。*p=20也就是改变的临时开辟的temp变量。

也就是说,C++中的const是真的常量,也就可以定义int arr[const 量];

 

转载请标明出处,原文地址:https://blog.csdn.net/come_from_pluto

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值