一
sizeof(变量) 或者 sizeof(类型) 来探测
sizeof 是关键字,不是函数
不同的平台,不同的硬件,不同的编译环境可以有差异,不要武断!
二
变量及其作用域 变量好比一个小盒子,能容纳数据,有名字,有地址,有大小,类型。。。
五个重要概念:
生存期:什么时候分配内存,什么时候释放内存
作用域:在什么位置可见,什么位置不可见
全局变量可以初始化,可以用表达式
全局变量可以在多个函数间,多个文件间共享
全局位置不能执行非定义语句
反面教材
int a = 100;
int b = 200;
int c;
c = a + b; // 编译错误!
int main()
{
cout << c << endl;
return 0;
}
三
程序分配的内存,主要在“栈”和“堆”这两部分。“堆”比“栈”复杂
内存的类型
只读代码: 存代码,也包括立即数,以及定常资源
静态空间: 存放static变量,全局变量,常量
栈区(stack): 自动变量,函数执行时的上下文环境
堆(heap): 程序运行中,动态地申请及归还
堆和栈的比较
优美的栈
后进先出的结构(LIFO) 对比:heap 是什么结构? 自由进出
栈能实现沿着原路返回的功能
想一想: 很多人爬山,山脚下堆放衣服,回来拿衣服的时,怎样不会纠缠在一起??
特点是:自动分配,自动释放
缺点: 栈溢出 stackoverflow
四
switch
当分支情况较多时,
if .. else if …. else if …. else …
嵌套过多,维护不方便。
switch(表达式){
case 1:
代码块1;
break;
case 2:
代码块2;
break;
default:
默认处理
}
五
循环是程序逻辑的关键点,是代码复杂度的源泉,需要谨慎对待
最可靠的循环—死循环
配合的出口语句:break if (条件) break;
while 和 do..while
do-while 循环并不常用,所有情况,可以用内部的break来解决