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 在移位操作时很重要

变量及其作用域

变量好比一个小盒子,能容纳数据,有名字,有地址,有大小,类型。。。

章节1:信息学竞赛 CPP 基础篇 - 图1

两个重要概念:

  • 生存期:什么时候分配内存,什么时候释放内存

  • 作用域:在什么位置可见,什么位置不可见

全局变量

定义在函数外的变量,静态的生存期

  • 全局变量可以初始化,可以用表达式
  • 全局变量可以在多个函数间,多个文件间共享
  • 全局位置不能执行非定义语句
  1. int a = 100;
  2. int b = 200;
  3. int c;//全局变量会自动初始化为0
  4. c = a + b; // 编译错误!
  5. int main()
  6. {
  7. cout << c << endl;
  8. return 0;
  9. }

此是反面教材, 不能在全局位置执行其它语句

变量可以在声明时初始化,也可以只声明。 当未初始化时,变量的值是随机的,此是很多bug发源地

局部变量:

函数内部定义,函数执行时存在

局部变量可以和全局同名,会产生覆盖效果

内存的类型

程序分配的内存,主要在“栈”和“堆”这两部分。“堆”比“栈”复杂

章节1:信息学竞赛 CPP 基础篇 - 图2

  • 栈区(stack): 自动变量,函数执行时的上下文环境
  • 堆(heap): 程序运行中,动态地申请及归还

章节1:信息学竞赛 CPP 基础篇 - 图3

  • 堆和栈的比较 章节1:信息学竞赛 CPP 基础篇 - 图4