ps. 一般IDE注释和取消注释的方案:行选中,ctrl + /
sizeof(变量)或者 sizeof(类型)来探测
sizeof 是关键字,不是函数
不同的平台,不同的硬件,不同的编译环境可以有差异,不要武断!
类型修饰符
==short== 更短
==long== 更长
==signed== 有符号
==unsigned== 无符号
如果省略了基本类型,默认为 int
short = short int
unsigned = unsigned int
类型能多次修饰
long long = long long int
类型的可能取值范围
#include <limits>
std::numeric_limits<类型>::max() 或 min() 求最大值,最小值
unsigned 能表示更大的数值范围
unsigned 在移位操作时很重要
变量及其作用域
变量好比一个小盒子,能容纳数据,有名字,有地址,有大小,类型。。。
两个重要概念:
生存期:什么时候分配内存,什么时候释放内存
作用域:在什么位置可见,什么位置不可见
全局变量
定义在函数外的变量,静态的生存期
- 全局变量可以初始化,可以用表达式
- 全局变量可以在多个函数间,多个文件间共享
- 全局位置不能执行非定义语句
int a = 100;
int b = 200;
int c;//全局变量会自动初始化为0
c = a + b; // 编译错误!
int main()
{
cout << c << endl;
return 0;
}
此是反面教材, 不能在全局位置执行其它语句
变量可以在声明时初始化,也可以只声明。 当未初始化时,变量的值是随机的,此是很多bug发源地
局部变量:
函数内部定义,函数执行时存在
局部变量可以和全局同名,会产生覆盖效果
内存的类型
程序分配的内存,主要在“栈”和“堆”这两部分。“堆”比“栈”复杂
- 栈区(stack): 自动变量,函数执行时的上下文环境
- 堆(heap): 程序运行中,动态地申请及归还
- 堆和栈的比较