C/C++文字常量与常变量

🏷️ 和365差不多的平台有哪些 📅 2026-07-22 18:02:49 👤 admin 👁️ 4121 ❤️ 78
C/C++文字常量与常变量

以下代码使用平台是Windows 64bits+VS2017。

在C/C++编程时,经常遇到以下几个概念:常量、文字常量、字面常量、符号常量、字符常量、常变量、字符串常量等,网上的资料描述的不尽相同,弄得大家云里雾里。本文将尝试为大家捋清楚以上易混淆概念的定义、关系和区别。

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

文字常量和常变量的本质区别:文字常量编译之后存储在代码段,不可寻址,常变量存储在数据区(堆、栈、BSS段或数据段),可寻址。

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

代码语言:javascript复制int& r=5; //编译错误这条语句出现编译错误,原因是文字常量不可寻址,因而无法为文字常量建立引用。下面这条语句又是合法的:

代码语言:javascript复制const int& r=5;原因是编译器将一个文字常量转化成常变量的过程。在数据区开辟一个值为5的无名整型常变量,然后将引用r与这个整型常变量进行绑定。

数值常量:包括整型常量和实型常量。整型常量指常整数,有十进制、八进制、十六进制三种表示形式。实型常量包括单精度浮点数(float)、双精度浮点数(double)和长双精度浮点数(long double),表示形式有科学计数法和非科学计数法。

代码语言:javascript复制int a=4; //4为数值常量中的整型常量

float b=4.4; //4.4为数值常量中单精度实型常量

double c=1.4e10; //1.4e5表示的值为1.4×10^5,是数值常量中双精度实型常量字符常量:指ASCII字符,有128个,分为普通字符和转义字符。普通字符指可直接书写的字符,如’a’和’b’。转义字符指不能直接书写的特殊字符,需要使用反斜杠进行表示,比如’\t’表示水平制表符,’\v’表示垂直制表符。

符号常量:用标识符代表一个常量,使用之前必须定义。例如宏定义和枚举元素。

代码语言:javascript复制#define NUM 100 //NUM为符号常量,100为整型常量

enum Weekday{SUN, MON, TUES, WED, THU, FRI, SAT}; //SUN,MON等均为符号常量2.常变量常变量指定义时必须显示初始化且值不可修改的变量。与其他变量一样被分配空间,是可以寻址的。注意,字符串常量是常变量的一种,名称为其本身,存储在代码段,可寻址,不可修改。

代码语言:javascript复制cout<<&”hello world”<

代码语言:javascript复制#include

using namespace std;

const int con1=3;

void showValue(const int& i)

{

cout<

}

int main(int argc,char* argv[])

{

const int con2=4;

int* ptr=NULL;

ptr=const_cast(&con2);

*ptr=5;

showValue(con2); //1,输出5

cout<<"con2:"<

ptr= const_cast(&con1);

*ptr=6; //3,运行时错误,写入冲突

}程序1处输出5,表明局部常量con2的值已经被修改,2处输出为结果仍然为4,并不是说明常变量con2的值没有被修改,而是因为编译器在代码优化的过程中已经将con2替换成了文字常量4。程序3处,运行时出错,表明全局常变量存储在只读内存,无法间接改写。

有关C/C++程序内存分区可参见博客程序内存布局。

参考文献[1]符号常量与常变量的区别

[2]百度百科.符号常量

[3]百度百科.字符常量

[4]百度百科.常量

[5]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008

相关内容

文章表格制作难吗?轻松掌握高效排版与数据呈现技巧
365bet网上娱乐网址

文章表格制作难吗?轻松掌握高效排版与数据呈现技巧

📅 01-21 👁️ 5035
合肥影视灯光器材、轨道、摇臂等出租
365bet网上娱乐网址

合肥影视灯光器材、轨道、摇臂等出租

📅 11-30 👁️ 4594
生日祝福歌曲大全100首
365bet365用址

生日祝福歌曲大全100首

📅 09-03 👁️ 1467