C和C++的区别三【const的修饰】

C和C++的区别三【const的修饰】


    在C语言中

   1)const修饰的变量称为常变量,在定义时可以进行初始化,也可以不初始化;但是如果在定义时未初始化的情况下,以后都不能在修改了,所在一般在定义时都进行了初始化;

例如:

const int num = 10;
const int b;
b = 20;//error

   2)由于这个常变量本质还是一个变量,所以不可用于数组的下标;

例如:

const int num = 10;
//int array[num] = {0};error

   3)在本文件引用其他文件中的const修饰的量时,跟普通变量一样,只要在本文件中加extern声明一下即可;

   4)由于这个常变量本质还是一个变量,我们可以定义指针通过解引用来改变变量的值;

例如:

int main()
{
	const int a = 10;
	int *p = (int *)&a;
	*p = 20;

	printf("a = %d\n",a);
	printf("*p = %d\n",*p);

	return 0;
}

上述代码图解:

所以说常变量是一种特殊的变量,它的编译方式和普通变量的编译方式一摸一样,只是常变量不能作为左值而已


在C++中

1)const修饰的变量称为常量,在定义时必须进行初始化,因为在C++的编译规则中,与编译阶段,所有使用常量所在的地方都被替换成它的初始值;

例如:

const int a = 10;
//a = 12;//error;在C++中const一旦初始化后则不能改变
const int s;//在C++中const是常量必须初始化

2)由于本质是一个常量,所以可用于数组的下标;

例如:

const int a = 10;
int arr[a];//合法

3)在本文件引用其他文件中的const修饰的量时,它的作用域为local,本文件所有,所以需要在const常量定义处外加extern,因为在编译时它会直接在文件中展开;

例如:

//test1.cpp文件中
const int baby = 10;
//test2.cpp文件中
extern const int baby;
int main()
{
	const int b = baby;
}

结果:

1>C和C++的区别.obj : error LNK2001: 无法解析的外部符号 "int const baby" (?baby@@3HB)
1>D:\vs练习代码\C++\C++复习\Debug\C++复习.exe : fatal error LNK1120: 1 个无法解析的外部命令

========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

::若想使得作用域变为global,则在定义处前加extern,则编译的时候当作global符号进行处理,则其他文件中可用;


4)由于本质是一个常量,我们不可以定义指针通过解引用来改变变量的值;

const int a = 10;
int *p = (int *)&a;
*p = 20;//error

5)引用一个编译阶段不明确的值的时候是常变量            常量-------》常变量;

例如:

int main()
{
	int a = 10;
	const int b = a;
	int *p = (int *)&b;
	*p = 20;
	cout<<b<<endl;
	cout<<*p<<endl;
}

结果:

所以说可以被修改,所以这块是常变量;(而不是常量了);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值