[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' 阅读(150) 评论(0) 收藏 举报
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号