[Cpp编程] 1.3 常量
常量
一个C++程序就是一系列数据与操作的集合。当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中。当数据与内存发生关联的时候,这些数据就会具有如下的特性:
- 数据在内存中的地址。
这个地址决定了数据在内存中的存储位置。在32位的系统中,每一个C++程序都具有4GB大小的内存地址空间,这个4GB大小的内存空间又被划分为若干个区域,如:栈区,堆区,全局(静态)区,文字常量区,以及程序代码区。不同内存地址的数据将会被存储在不同的内存区域中; - 数据在内存中的值。
如果该值可变,那么该数据就是变量;如果该值不可变,那么该数据就是常量; - 数据的类型。
数据的类型决定了数据占用内存的多少。如:Int型占4个字节,Short型占两个字节; - 内存分配的时间点。
有的数据在编译时由编译器分配内存,这些数据是:全局变量/常量,文字常量,静态变量。在编译阶段,编译器就为这些数据分配了内存,当程序运行的时候,这些数据就会被直接加载到已分配的内存位置上;而有的数据只能在运行时由系统分配内存,如:函数内部的局部变量,以及使用new操作符分配的变量。这些数据的内存地址在程序运行时刻才能确定。


#define PRICE "这是一个符号常量"
void func() {
char a0 = 'A'; // 这是一个字符常量
string a = "这是一个字符串常量";
}
常量无unsigned型。但一个非负值的整数可以赋值给unsigned型变量,只要它的范围不超过变量的取值范围即可。例如,将50000赋给一个unsigned short int 型变量是可以的,而将70000赋值给它是不行的(将会溢出)。
const 关键字
#include <iostream>
using namespace std;
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
修饰符类型
C++ 允许在 char、int 和 double 数据类型前放置修饰符。(1)signed (2)unsigned (3)long (4)short
其中:有符号整数和无符号整数修饰符之间存在差别。
#include <iostream>
using namespace std;
void modifier() {
short int i;
unsigned short int j;
j = 50000;
i = j;
cout << "i = " << i << "\t j=" << j << endl;
}
int main(void) {
modifier();
}

上述结果中,unsigned short int: 50,000 的位模式被解释为signed short int :-15,536。其实就是溢出了,只取最大值。
类型限定符
| 限定符 | 含义 |
|---|---|
| const | const 类型的对象在程序执行期间不能被修改改变。 |
| volatile | 修饰符 volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。 |
| restrict | 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 |
posted on 2022-02-05 11:41 YangShusen' 阅读(162) 评论(0) 收藏 举报
浙公网安备 33010602011771号