C++(五)之const在C/C++中的区别

const 大家都很熟悉。修饰变量后,变量的值不可改变。

例如:   const int a = 10;

              a = 11; //这句话会被编译器报错,因为a是const属性。

那么在后面的程序中,a的值不可改变。

 

那么我们先看下在C中 const的属性:

#include <stdio.h>

int main(void)
{
	const int m_A = 20;
	
	//m_A = 25;   //这样修改会报错,因为20是只读变量
	
	//但是如果我们修改成如下这样就可以改变变量m_A的值
	
	int *p = (int *)&m_A;
	
	*p = 25;
	
	printf("*p = %d, m_A = %d\n", *p, m_A); 
	

	
	return 0;
}

结果:

我们看到 const修饰的变量m_A被修改了。

虽然不能直接修改,但是我们可以透过指针来修改变量m_A的值。原因是什么呢?

因为在C中我们在定义 const int m_A的时候,内存会分配一段内存用来存储m_A。

而我们的指针绕过编译器,直接跑到这块内存中偷偷修改了里面的值。  

所以当我们再回来这块内存取该变量m_A的时候,值已经被修改了。

 

那么在C++中。

#include <iostream>

using namespace std;

int main(void)
{
	const int m_A = 20;
	
	//m_A = 24;  //同C一样直接修改是不行的,const修饰的是只读变量
	
	int *p = (int *)&m_A;
	
	*p = 24; 
	
	cout << "*p = " << *p << " m_A = " << m_A << endl; 
	
	return 0;
}

结果为

我们同样透过指针也没有能够修改掉m_A的值。

因为在C++中const修饰的变量不会再被分配内存,所以我们透过修改内存的方式是不能改变m_A的值的。

C++中const修饰的变量是透过key值来对应的。(key---value, key类似于身份证ID, value类似于这个人)。

所以, C++中的指针操作来修改const变量的时候。内存的具体做法是,

temp = m_A;

int *p = &temp;

所以最后修改的是这个隐藏的temp的值,而不是const修饰的那个变量m_A本身。

 

总结,const虽然修饰的变量为只读属性。

但是在C中可以称之为伪常量。

在C++中才可以称之为真正的常量。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值