1、一、实参与形参形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送 。1. 形 参 变 量 只 有 在 被 调 用 时 才 分 配 内 存 单 元 , 在 调 用 结 束 时 , 即 刻 释 放 所 分 配 的 内 存 单 元 。 因 此 , 形 参 只 有 在 函 数 内 部 有 效 。 函 数 调 用 结 束 返 回 主 调 函 数 后 则 不 能 再 使 用 该 形 参 变 量 。 2. 实
2、 参 可 以 是 常 量 、 变 量 、 表 达 式 、 函 数 等 , 无 论 实 参 是 何 种类 型 的 量 , 在 进 行 函 数 调 用 时 , 它 们 都 必 须 具 有 确 定 的 值 , 以 便 把 这 些 值 传 送 给 形 参 。 因 此 应 预 先 用 赋 值 , 输 入 等 办 法 使实 参 获 得 确 定 值 。 3. 实 参 和 形 参 在 数 量 上 , 类 型 上 , 顺 序 上 应 严 格 一 致 , 否 则会 发 生 “类 型 不 匹 配 ”的 错 误 。 4. 函 数 调 用 中 发 生 的 数 据 传 送 是 单 向 的 。 即 只 能 把 实 参 的
3、值 传送 给 形 参 , 而 不 能 把 形 参 的 值 反 向 地 传 送 给 实 参 。 因 此 在 函数 调 用 过 程 中 , 形 参 的 值 发 生 改 变 , 而 实 参 中 的 值 不 会 变 化 。二 、 内 联 函 数1. 作 用 : 消 除 函 数 调 用 时 的 时 间 开 销1. 牺 牲 空 间 来 换 取 时 间2. 使 用 条 件 : 函 数 规 模 小 (15 行 ), 频 繁 调 用 不 能 含 循 环 结 构 或 switch 结 构 不 能 含 有 任 何 静 态 数 据 或 数 组 声 明 不 能 是 递 归 函 数3. 特 性 : 源 代 码 : 拥 有
4、 函 数 结 构 编 译 时 : 用 函 数 体 替 换 调 用 处 函 数 名 (类 似 宏替 换 ) 编 译 后 : 不 具 备 函 数 性 质4. 声 明 形 式 : inline void func()5. 注 意 事 项 : 内 联 函 数 的 定 义 必 须 出 现 在 内 联 函 数 第 一 次 被调 用 之 前 。 最 终 能 否 内 联 , 由 编 译 器 决 定 。 inline 只 是声 明 或 建 议 , 如 果 编 译 器 认 为 不 适 合 , 将 会 放弃 内 联 , 视 为 普 通 函 数 来 处 理 。三 、 while(1) 什 么 意 思 , while(
5、i-)什 么 意 思 ? while 语句的原型是 while(表达式)语句,当表达式为非 0 值时,执行 while 语句中的嵌套语句 。 那么 while(1)其中 1 代表一个常量表达式,他永远不会等于 0。所以,循环会一直执行下去。除非你设置 break 等类似的跳出循环语句循环才会中止 while(i-)其中 i 是一个变量,因此表达式 i-有不同的值,依次递减,i-是先取值后减, -i 先加后取值 ,所以 i-的值同未执行该自减运算时的 i 相等。因此当 i 为 0 时,循环会跳出 很容易混淆的是把 i-的值误认为 i 执行自减后的值,可以编个小程序验证下 #include #include using namespace std; int main() int i=1; while(i-)/此时 i=0 i-;/执行该语句 i 为-1break; couti; system(“pause“); 输出为-1,说明执行了循环内 i-的语句