06 chapter 函数和递归入门(cpp大学教程)学习笔记

  • 6.1 函数原型和实参类型的强制转换
    • 函数原型(函数声明)
      • 函数名称、返回数据类型、预期接受形参个数及类型和顺序
      • unsigned int calculate(int, int, int);
      • 若定义在函数调用之后,则需要在调用之前定义相应的函数原型,否则会出现编译错误
    • 函数原型(签名)
      • 函数名和实参类型,函数签名不指定返回类型,在同一作用域内的函数必须拥有不同的签名
    • 实参类型强制转换
      • 把实参类型强制转换为形参申明的类型
  • 6.2 随机数和种子
    • 生成随机数
      • number = shiftingValue + rand() % scalingFactor;
      • 通过rand函数和比例缩放因子(scalingFactor)生成想要范围的随机数
    • 随机数种子
      • srand(seed)
      • 通过time函数生成不同的随机数种子
        • srand( static_cast<unsigned int>(time(0)) );
        • 通过<ctime>中函数time,提供参数0返回“格林尼治时间”(GMT)1970.1.1 0时起到现在的秒数
  • 6.3 存储类别和存储器
    • 存储器
      • 标识符的存储期决定了标识符在内存中存在的时间
      • 类别
        • 自动存储期
          • 具有自动存储期的变量
            • 声明在函数内的局部变量
            • 函数的形参
            • 用register声明的局部变量或者函数的形参
              • register unsigned int counter = 1;//关键词register只能与局部变量和函数的形参一起使用
              • 作用:建议编译器在计算机高速寄存器中而不是在内存中保存该变量
          • 只存在于定义的函数体中最接近的花括号内,当程序执行时被创建,语句块结束时则被销毁
        • 静态存储期
          • 声明标识符extern外部标识符和static局部变量标识符
          • 具有静态存储期的变量从程序开始到结束会一直存储在内存当中,即函数最后一次执行得到的值
          • 如果没有显式的初始化静态存储期的变量,默认初始值为0
        • 动态存储期
        • 线程存储期
    • 链接
      • 决定了标识符是只在他声明的源文件中可以识别还是在经过编译后链接在一起的多个文件中可以识别
  • 6.4 作用域
    • 标识符在程序中可以被引用的范围
    • 类别
      • 语句块作用域
        • 当语句块内具有与外部相同的标识符时,会“隐藏”外部标识符,知道语句块执行结束为止
      • 函数作用域
        • 向switch case语句中case: 后跟的标识符
      • 全局命名空间作用域
        • 从声明开始到文件结尾处位置出现的所有函数都是可访问的
      • 函数原型作用域
        • 形参列表中的标识符,可以在程序任何地方无歧义的复用
      • 类作用域
      • 命名空间作用域
  • 6.5 函数调用堆栈和活动记录
    • 数据结构:后进先出
    • 堆栈溢出
      • 函数调用其他函数到期结束之前,内部的实参和形参会一直保存,若太多的函数被调用,则会超出最大存储范围
  • 6.6 内联函数
    • inline double cube( const double side){return side*side*side};
    • 内链函数不会直接调用函数,而是保存函数体内的代码,直接带入到执行语句中,可以减少寄存器的存储量,提高性能
  • 6.7 引用和引用形参
    • int &count 引用形参,函数不会生成变量副本,而是直接引用变量,可以修改变量的值
    • 作用:减少内存消耗
    • 从函数中返回引用:若没有声明static,函数结束时会销毁,因此返回将会产生错误
  • 6.8 一元的作用域分辨运算符
    • ::number可以访问全局变量
  • 6.9 函数重载
    • 通过设置不同的形参类型实现函数重载,重载函数铜鼓他们的签名区分
    • 注意:main函数不能被重载
  • 6.10 函数模板
    • template < typename/class T> T maximum( T value1, T value2, T value3){};
    • 以关键字template开头,一对尖括号括起的函数形参列表,每个形参以typename或者class开头
    • 尾随返回值类型
      • template < typename T> auto maximum(T y, T x, T z) -> T;//用->表示返回值类型
  • 6.11 递归
    • 递归是堆栈结构,不断的调用函数知道问题解决为基本情况为止;迭代是循环体结构,用计数器控制
    • 斐波那契数列
      • f(n) = f(n-1) + f(n-2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值