目录
前言
1.常量是什么?
2.常量的的类型
本质区别:
1)文字常量(无法取地址)
🌷什么是字面值??
字面值后缀
🌷文字(字面)常量的基本类型
1.整型常量
2.实型常量
3.布尔常量
4.字符常量
5.符号常量
2)常变量
参考文章:
💗感谢阅读!💗
前言
常量的深入学习,有助于我们对于之后的const关键字的学习,同时也帮助我们更好对于类型转换、临时对象具有常性的理解!!
1.常量是什么?
常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
2.常量的的类型
在C/C++编程时,经常遇到以下几个概念:常量、文字常量、符号常量、字面常量、常变量、字符串常量和字符常量,网上博客资料也是千篇千律,不尽相同。
在C/C++中常量分为两种:文字常量(Literal constant)和常变量(constant variable)。
本质区别:
文字常量和常变量的本质区别:
- 文字常量编译之后存储在代码区,不可寻址。
- 常变量存储在数据区,可寻址。
1)文字常量(无法取地址)
文字常量又称为“字面常量” 、“字面值常量”,包括数值常量、字符常量和符号常量。
其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。
🌷什么是字面值??
字面值是直接插入到代码中的值。例如
return 5; // 5 是整数字面值
bool myNameIsAlex { true }; // true 是bool字面值
double d { 3.4 }; // 3.4 是double 字面值
std::cout << "Hello, world!"; // "Hello, world!" 是 C语言格式的字符串字面值
- 字面值可以直接进行使用!无需其他操作!
- 字面值有时被称为字面值常量,因为它们的值无法重新定义(5总是指整数值5)。
- 字面值的类型是从字面值的值中推导出来的。例如,作为整数(例如5)的字面值被推断为int类型。
字面值后缀
如果字面值的默认类型不符合需要,则可以通过添加后缀来更改字面值的类型:
类别 | 后缀 | 类型 |
integral | unsigned int | u or U |
integral | long | l or L |
integral | unsigned long | ul, uL, Ul, UL, lu, lU, Lu, LU |
integral | long long | ll or LL |
integral | unsigned long long | ull, uLL, Ull, ULL, llu, llU, LLu, LLU |
integral | The signed version of std::size_t (C++23) | z or Z |
integral | std::size_t (C++23) | uz, uZ, Uz, UZ, zu, zU, Zu, ZU |
floating point | float | f or F |
floating point | long double | l or L |
string | std::string | s |
string | std::string_view | sv |
🌷文字(字面)常量的基本类型
可以概括为:整型常量、实型常量、布尔常量、字符常量、符号常量。
1.整型常量
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
通常不需要为整型字面值使用后缀。
以下是各种类型的整数常量的实例:
85 // 十进制
0213 // 八进制
0x4b // 十六进制
30 // 整数
2.实型常量
实型常量只采用十进制小数形式和指数形式表示,包括单精度浮点数(float)、双精度浮点数(double)和长双精度浮点数(long double)。
规范化的指数形式
在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。
且e后面的指数必须为整数。
例如:123.456的指数形式
123.456e0,12.3456e,0.123456e3,0.0123456e4,0.00123456e
规范化的指数函数?
1.23456e2 = 1.23456 * 10^2
3.14159 // 合法的
314159E-5L // 合法的 31459*10^-5 = 0.314159510E // 非法的:不完整的指数
210f // 非法的:没有小数或指数
.e55 // 非法的:缺少整数或分数
3.布尔常量
布尔常量共有两个,它们都是标准的 C++ 关键字:
- true 值代表真。
- false 值代表假。
我们不应把 true 的值看成 1,把 false 的值看成 0。
4.字符常量
用单引号(‘ ’)括起来的一个字符。
注:
(1)字符常量只能用单引号括起来,不能用双引号或其他括号;
(2)只能是单个字符,不能是字符串;
(3)字符可以是ASCII码字符中任意字符。(常见的128个)
(4)还会存在,特殊字符:转义字符(以“\”开头的)
'a' //合法
'\n' //合法
5.符号常量
用标示符代表一个常量,使用之前必须定义。
#define 标识符 常量
- 预处理命令后不用加分号!!!
- 符号常量名用大写,变量名用小写,以示区别
#define N 30#include<stdio.h>int main(){int num, total;num = 10;total = num * N;printf("total = % d\n", total);return 0;}
枚举常量
- 枚举并不是使用下标来定位元素值,而是使用关键字;
- 不同的
enum
中的值可以相同,但是名称必须不同;enum
的默认值为0, 1, 2...
,而数组是按照类型默认为其空值或者0
。enum months {Jan=1, Feb,Mar, Apr, May };
2)常变量
const修饰的变量称为常变量。不能被修改。因此存储在常量区,可寻址。
且const修饰的变量,必须在定义的时候实现初始化。
常变量在C/C++中由const关键字来定义,分为全局常变量和局部常变量。
二者的区别在于:
全局常变量存储在静态存储区的常量区,属于只读内存,不可修改。
局部常变量存储在栈区,在高级语言语义层面上由编辑器做语法检查来保障其值不可修改,因不是放在只读内存中,可以获得局部常变量的地址,间接进行修改
#include <iostream>
using namespace std;
int main()
{const double pi=3.141592; //圆周率的值用pi表示cout<<"圆周率的近似值是"<<pi<<endl;return 0;
}
参考文章:
C/C++文字常量与常变量的概念与区别 - This_is_bill - 博客园 (cnblogs.com)
字面值常量 – C++学习网 (studycpp.cn)
C++ 常量 | 菜鸟教程 (runoob.com)