sizeof(变量) 或者 sizeof(类型) 来探测

sizeof 是关键字,不是函数

不同的平台,不同的硬件,不同的编译环境可以有差异,不要武断!




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

2024/1/27 - 图1

五个重要概念:

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

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

全局变量可以初始化,可以用表达式

全局变量可以在多个函数间,多个文件间共享

全局位置不能执行非定义语句

反面教材
  1. int a = 100;
  2. int b = 200;
  3. int c;
  4. c = a + b; // 编译错误!
  5. int main()
  6. {
  7. cout << c << endl;
  8. return 0;
  9. }

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

内存的类型

只读代码: 存代码,也包括立即数,以及定常资源

静态空间: 存放static变量,全局变量,常量

栈区(stack): 自动变量,函数执行时的上下文环境

堆(heap): 程序运行中,动态地申请及归还

2024/1/27 - 图2 2024/1/27 - 图3

堆和栈的比较

2024/1/27 - 图4

优美的栈

后进先出的结构(LIFO) 对比:heap 是什么结构? 自由进出

栈能实现沿着原路返回的功能

想一想: 很多人爬山,山脚下堆放衣服,回来拿衣服的时,怎样不会纠缠在一起??

特点是:自动分配,自动释放

缺点: 栈溢出 stackoverflow

switch

当分支情况较多时,

if .. else if …. else if …. else …

嵌套过多,维护不方便。

  1. switch(表达式){
  2. case 1:
  3. 代码块1;
  4. break;
  5. case 2:
  6. 代码块2;
  7. break;
  8. default:
  9. 默认处理
  10. }

2024/1/27 - 图5

循环是程序逻辑的关键点,是代码复杂度的源泉,需要谨慎对待

最可靠的循环—死循环

配合的出口语句:break if (条件) break;

while 和 do..while

do-while 循环并不常用,所有情况,可以用内部的break来解决 2024/1/27 - 图6