C++ Const

/**********************
C语言的const变量是只读变量,有自己的存储空间。
C++中的const常量:
	可能分配存储空间(符号表,C++编译器生成,key和value对应),例如:
		当const常量为全局,并且需要在其他文件中使用。(使用了extern)
		当使用&操作符取const常量的地址。(为了兼容C的操作,会再在四区内分配一个,但是字符表里面的不会修改)
	也可能不分配。
***********************/

#include <stdio.h>

/*
int main()
{
	
	//a 是一个只读的常量,有自己的存储空间,按照理论应该不能被修改
	//在c++里面通过const修饰的东西,真正意义的const,被定义后会被放在符号表(脱离四区)
	
	const int a = 10;
	int *p = NULL;
	p = (int *)&a; //对a取地址,当你对a取地址的时候,有一个内存空间(&a a的内存空间)
	*p = 11;  //C竟然可以修改 ,伪const C++不可以修改,a的值还是10

	printf("修改之后a:%d \n", a); //C语言里面是11,C++里面是10
	printf("*p:%d \n", *p);  //*p的值为11
	
	//

	const int a = 1; //编译期间放在符号表中,值定下来
	const int b = 2;
	int array[a + b] = {0};  //c语言中错误,a + b为只读的变量,不是真正的常量;c++正确


	int i = 0;

	for(i=0; i<(a+b); i++)
	{
		printf("array[%d] = %d\n", i, array[i]);
	}

	
	return 0;
}
*/

//C++中的define和const作用域不同
void fun1()
{
	#define a 10      
	const int b = 20;       //推荐使用const常量替代宏常数定义
}
void fun2()
{
	printf("a = %d\n", a);  //可以调用a
	//printf("b = %d\n", b);  //不可以调用b
}
int main()
{
	fun1();
	fun2();
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的提千万

江山父老能容我,不使人间造孽钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值