常变量和符号常量的区别?常变量和文字常量的区别?

 

定义符号常量:#define PI 3.1415926        //没有分号
定义常变量  :const float PI=3.1415926;

符号常量和常变量的区别:

常变量:具有变量的特征是存在一个以变量名命名的存储单元,在一般情况下,存储单元中的内容是可以变化的。而对于常变量,在变量的基础上加了一个限定:存储单元中的内容不允许变化,仍然是有存储单元的。

符号常量:是使用一个字符串代替程序中出现的一个标识符,是编译时把所有的符号常量都替换成制定的字符串,它没有类型,在内存中也不存在以符号常量命名的存储单元。在其作用域内其值不能改变和赋值。

常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof运算符测出其长度。与一般变量惟一的不同是指定变量的值不能改变。用#define命令定义符号常量是C语言所采用的方法,C++把它保留下来是为了和C兼容。C++的程序员一般喜欢用const定义常变量。虽然二者实现的方法不同,但从使用的角度看,都可以认为用了一个标识符代表了一个常量。有些书上把用const定义的常变量也称为定义常量,但读者应该了解它和符号常量的区别。

常变量和文字常量的区别:

常量指值不可改变的量。在C/C++中常量分为两种:文字常量(Literal constant)和常变量(constant variable)。 

文字常量和常变量的本质区别:文字常量编译之后存储在代码区,不可寻址,常变量存储在数据区,可寻址。

常变量:前面已经说明概念,它本身的存储区和普通变量的存储也没什么区别,只不过分类不同。

文字常量:文字常量又称为“字面常量”,包括数值常量字符常量符号常量。其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。

int& r=5;//编译错误

这条语句出现编译错误,原因是文字常量不可寻址,因而无法为文字常量建立引用。 
下面这条语句又是合法的:

const int& r=5;

原因是编译器将一个文字常量转化成常变量的过程。在数据区开辟一个值为5的无名整型常变量,然后将引用r与这个整型常变量进行绑定

数值常量:包括整型常量和实型常量。整型常量就是指常整数,有十进制、八进制、十六进制三种表示形式。实型常量只采用十进制小数形式和指数形式表示,包括单精度浮点数(float)、双精度浮点数(double)和长双精度浮点数(long double)。

int a=4;//4为文字数值常量中的整型常量
float b=4.4//4.4为单精度实型常量
double c=1.4e10//1.4e5表示的值为1.4×10^5,双精度实型常量

​

字符常量:指单个ASCII码字符,有256个,如’a’和’b’。

符号常量:用标示符代表一个常量,使用之前必须定义。

#define NUM 100//NUM为符号常量,100为整型常量
enum Weekday{SUN, MON, TUES, WED, THU, FRI, SAT};//SUN,MON等均为符号常量

关于static我会自己再在后面去补充。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值