复习:
1、函数传递
值传递:普通变量,实参与形参单向值传递,函数之间不能共享同名变量
址传递:数组,函数之间可以共享同一个数组,数组长度会丢失,需要额外增加一个参数传递数组的长度
返回值:return语句不是把数据直接传递给调用者,而是放入到都能访问的一个公共区域内,如果没有return语句,那么该区域的就是一个不确定的垃圾值
2、进程映像
程序:存储在磁盘上的可执行文件(二进制、脚本)
进程:系统中正在运行的程序,数据加载到内存运行
进程映像:进程内存的分布情况
text 代码段 二进制指令、常量、被const修饰过的初始化过的全局变量、静态局部变量 只读 强制修改产生段错误
data 数据段 初始化过的全局变量、静态局部变量
bss 静态数据段 未初始化过的全局变量、静态局部变量 该段内存在进程运行前会自动清理为0
heap 堆 由程序员手动管理,使用麻烦,足够大
stack 栈 局部、块变量,由系统自动申请、释放内存,使用简单,小
变量的分类:
存储位置、生命周期、作用范围
全局变量:定义在函数外的变量
databss
程序开始到程序结束位置
整个程序任意位置
局部变量:定义在函数内的变量
stack
函数开始到函数结束
函数内使用
块变量: 定义在语句块内变量
stack
函数开始到函数结束
语句块(ifforwhile)内使用
注意:局部变量会屏蔽同名的全局变量,块变量会屏蔽同名的局部变量和全局变量
全局变量建议首字母大写,局部、块全部小写
3、类型限定符
auto 定义自动申请、释放内存的变量,不加就代表了加
extern 声明变量,a.c中的全局变量想要被b.c使用,在使用前通过extern 类型名 变量名;方式声明才能通过编译,如果a.c中没定义,链接时依然会报错
static
改变存储位置
局部变量,由stack改为databss
延长生命周期
局部变量,函数结束后不会被销毁,直到程序结束
static int num =10;
限制作用范围
全局变量、函数,只能在本文件内使用
const
“保护”变量的值不被显示地修改
const 修饰初始化过的全局变量、静态局部变量,变成了常量,强制修改会段错误
register
申请把变量从内存移到寄存器中存储,不一定能申请成功
volatile
被修饰的变量不进行取值优化
volatile int num;
if(num == num)
typedef
类型重定义
typedef int num;
num a; //num就相当于int的新的类型名
小项目:五子棋
需要的数据:
1、定义字符数组棋盘 15*15
2、定义变量用于记录落子的位置
3、定义一个变量来记录棋子角色 黑棋'@' 白棋'$'
业务逻辑:
定义需要数据
是否需要对数据进行初始化
for(;;)
{
1、清理屏幕、显示棋盘
2、落子
坐标要合法、该位置不能有棋子
否则继续重新落子
3、检查是否五子连珠
是,结束游戏
4、交换角色
}
暑期编程PK赛 得CSDN机械键盘等精美礼品!


