C/C++:混肴点分析 📅 发布时间:2026/8/21 14:43:26 👁 浏览次数: C++中的常量介绍字面常量字面常量是指直接出现在代码中的常量值。例如,整数常量10、浮点数常量3.14、字符常量'A'等都属于字面常量。字面常量的值在编译时就已经确定,并且不能被修改。字面常量存在类型,也有地址注意字符常量和只包含一个字符的字符串在 C/C++ 中有一些区别:1.表示方式:字符常量使用单引号括起来,例如 'A',而只包含一个字符的字符串使用双引号括起来,例如 "A"。2.类型:字符常量的类型是 char3.存储方式:字符常量在内存中占用一个字节的空间,而只包含一个字符的字符串会分配n+1的空间(n个用于存储字符,一个用于存储字符串结束符 \0)。4.使用上的差异:字符常量可以直接赋值给一个 char 变量,例如 char ch = 'A';。而字符串不能直接赋值给 char 变量,需要使用字符指针或字符数组来处理,例如 const char* str = "ABC";指针需要加const。5.操作上的差异:对字符常量进行操作时,可以直接使用字符之间的运算符,例如 'A' + 1;而对只包含一个字符的字符串进行操作时,需要使用字符串相关的函数或操作方法,例如 strlen()、strcpy() 等。符号常量符号常量是通过标识符来表示的常量值,在程序中使用时要先进行定义。使用符号常量的好处是可以给常量起一个具有描述性的名字,方便理解和维护代码。在C++中,我们通常使用const关键字来定义符号常量。在C++中,符号常量的定义语法有两种方式:使用#define预处理指令和使用const关键字。1.使用#define预处理指令定义常量:#define 常量名 值例子:#define PI 3.14159#define MAX_VALUE 100用#define定义的常量是在编译前进行文本替换,没有类型限制,可以用于定义任何类型的常量有类型,但没有地址2.使用const关键字定义常量:const 类型 常量名 = 值;例子:const int MAX_VALUE = 100;const double PI = 3.14159;使用const定义的常量有类型限制,可以用于定义任何类型的常量,也可以用于定义对象常量有类型,也有地址C++的const分析1:C++和C的const实现原理对比C语言中的const修饰的变量实际上还是一个变量,只是一个只读变量,是可以通过指针来改变,改变方法就是对这个const变量取地址,然后用指针指向它,去修改这个指针指向的内容,所以说C语言中const修饰的并不是真正意义上的常量,而是一个只读变量。但是有一种情况例外,就是C语言用const修饰的全局变量,编译器把它放在只读存储区里面。C++里面的const修饰的变量,编译器对它的处理,是把这个放在符号表里面,符号表就是一个二维表,里面有符号和对应的值。假设采用与C语言类似的方法取地址,然后改变指针指向的内容的方法,const变量的内存还位于栈区或者静态存储区,原先空间的值依旧会改变,但符号表里的值没变,打印结果也不会变。所以C++里面的const修饰的的确是常量,而不是只读变量,C++里面对const常量使用了extern,也会分配存储空间。const字符常量有空间,有地址2:const与宏定义之间的区别宏定义发生在预处理阶段,不会检查作用域和类型。这就是本质的区别。void f(){ #define a 3