编程小白探索笔记---c++与C语言中const常量的基础和const符号表机制探究

编程小白探索笔记---c++与C语言中const常量的基础和const符号表机制探究

复习笔记:

示例代码

在C语言编辑器中

> void main() 
> {
> 
> 	 const int a = 10; 	
>    //a=11; 	
>	 int *p = NULL; 
> 	 p = (int*)&a;
>  	*p = 20; 
> 	 printf("a:%d\n",a); 
> 	 //system("pause");
>  }

输出的结果:a:20
在C语言中a的值已经发生了改变,原本的

而在c++编译器中相同的代码,输出的却是不同的值

void main()
{

	const int a = 10;
	//a=11;
	int *p = NULL;
	p = (int*)&a;

	*p = 20;
	printf("a:%d\n",a);
	system("pause");
}

输出的结果:a:10

面对俩个不同的结果,这是不是让人很疑惑呢?
现在,让我们回到const常量的定义

const常量的定义:

C++中常量
a. 常量: 其值在程序运行的过程中不会发生改变,但是定义常量的时候可以设置初始值。
C++中使用const关键字来定义一个常量。

//a是常量
const int a=10;
//下面的两种方式是一样的,都是定义一个常量
const int b =8; int
const c =9;

b. 对于常量,编译器会将其放在一个只读的内存区域,其值不能发生改变。
c. 使用常量的好处就在于灵活,程序中多次用到常量,修改其值时,只需要改变定义时候的常量值就可以。
d. 注意: 定义函数时,如果在函数体中不需要修改形式参数的值,建议将形式参数的值设为常量(const),以防用户不小心修改了这个值,会出现错误消息。

也就是说, const 修饰的变量是一个常量,在程序执行的过程中其值都不会发生改变。
回顾到c和c++中俩种,这让我们感觉C语言中的const是一个冒牌货,而c++语言中的const是一个真正的常量,然而实际的原因不是这样

实际原因:

直接输入1次#,并按下space后,将生成1级标题。输入2次#,并按下space后,将生成2级标题。以此类推,我们支持6级标题。有助于使用语法后生成一个完美的目录。
在c++编译的内存空间中,当执行

p = (int*)&a;

时,代码会先对a取地址,然后再把这个地址赋值给p,此中的过程是对a取地址时,c++编译器会开辟一块新的内存空间,从而来存放a原先这个变量所存储的值
在这里插入图片描述
然后再将这块内存空间赋给p,相当于一个指针p指向了这块内存空间。当执行如下语句:

*p = 20;

p所指向的内存空间中的值已经发生了改变,而a变量本身的值并没有发生改变。

void main()
{

	const int a = 10;
	//a=11;
	int *p = NULL;
	p = (int*)&a;

	*p = 20;
	printf("a:%d\n",a);
	printf("*p=%d\n",*p);
	system("pause");
}

如果我们加上这句

printf("*p=%d\n",*p);
结果是p=20

他输出的值就会是p指向的值了

总结

c++中const常量与C语言中不同的是他在赋值的时候会开辟出一个新的空间去存储值,如果没有区分这一点,将会很大程度让你的代码出错

望加油,勉励共进!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值