C++ Q&A

参考:《C++ Primer》

6 函数

关键:函数重载,函数指针

6.1 函数基础

调用函数

调用函数中return语句的作用?

与函数调用一样,return语句也完成两项工作:

  • 返回return语句中的值,如果有的话;

  • 将控制权从被调函数转移回主调函数;

形参与实参

形参与实参的定义与区别?

性质:

  • 实参是形参的初始值。第几个实参初始化第几个形参;

  • 实参与形参之间存在对应关系,但是并没有规定实参的求值顺序;

  • 实参的类型必须与对应的形参类型匹配;(包括个数,因此形参一定会被初始化)

  • 即使类型稍微不同,也需要具备能够转换的功能;(比如形参int对于实参3.14也成立)

  • 形参列表可以为空,但不可以被省略;(可使用void表示函数无形参)

  • 每个形参的类型都要被声明,且不可同名;

函数返回类型

函数返回类型有哪些?

  • 返回类型void表示函数不返回任何值;

  • 返回类型不能是数组或函数类型,但可以是指向数组或函数的指针;

局部对象

局部变量的定义?

形参和函数体内部定义的变量

自动对象

自动对象的定义?

只存在于块执行期间的对象称为自动对象;

当块的执行结束后,块中创建的自动对象的值变为undefined;

自动对象的例子?

形参是一种自动对象;

局部变量于自动对象的关系?

对于局部变量对应的自动对象来说,分2个情况:

  • 变量定义本书含有初始值,就用该初始值来初始化;

  • 变量定义本书不含初始值,执行默认初始化;(内置类型的未初始化局部变量将参数未定义的值的)

局部静态对象

为什么需要局部静态对象,有何意义?如何获得?

  • 延长局部变量的生命周期,甚至贯穿函数调用及之后的时间;

  • 将局部变量定义为static类型从而获得局部静态对象;

  • 在程序的执行路径第一次经过对象定义语句时初始化,直到程序终止才被销毁,在此期间函数结束执行也毫无影响;

  • 内置类型的局部静态变量初始化为0;

形参、局部变量、局部静态变量的区别,并举例具体说明?

  • 形参和定义在函数体内部的变量统称为局部变量,他们对于函数而言是局部的,仅在函数的作用域内可见;

  • 函数体内的局部变量分成:普通局部变量 & 静态局部变量

    • 形参 & 普通局部变量:当函数的控制路径经过变量定义语句时创建该对象,到达对应所在块末尾时销毁;

      • 只存在于块执行期间的对象为自动对象;

        • 形参:形参是一种自动对象;

        • 普通变量对应的自动对象:定义该变量的语句出创建自动对象,如定义语句提供初始值,则用起初始化;否则,执行默认初始化;块结束后,变量失效;

    • 局部静态变量:生命周期贯穿函数调用及之后的时间;

形参:val1与val2;普通局部变量:result;局部静态变量:iCnt;

double myADD(double val1, double val2)
{
  double result = val1 + val2;
  static unsigned iCnt = 0;
  ++iCnt;
  cout << "该函数已经累计执行了" << iCnt << "次" << endl;
  return result;
}
​
int main()
{
  double num1, num2;
  cout < "请输入两个数:";
  while (cin >> num1 >> num2)
  {
    cout << num1 << "与" << num2 << "的求和结果是" << myADD(num1, num2) << endl;
  }
  return 0;
}

函数声明

函数声明与定义的关系?

  • 函数只能定义一次,但可以声明多次;(不过存在例外)

  • 若一个函数永远不会被用到,则可以只有声明没有定义;

  • 唯一区别:函数声明无须函数体,用一个分号替代即可;(因此也无须形参的名字,虽可省略,但写上可帮助理解函数功能)

分离式编译

为什么需要分离式编译?

把程序分割到几个文件中去,每个文件独立编译,降低程序的复杂度;

如何编译和链接多个源文件?

  • 已知位置信息:

    • fact函数:fact.cc文件中;

    • 函数声明:chapter6.h头文件中;

    • main函数:factMain.cc文件中;

  • 目标:在main函数中调用fact函数

  • 要生成可执行文件exe,必须告诉编译器代码在哪儿:

    • $ CC factMain.cc fact.cc # generate factMain.exe or a.out
      $ CC factMain.cc fact.cc -o main # generate main or main.exe
    • CC是编译器的名字;

    • $是系统提示符;

    • #后面是命令行下的注释语句;

    • 接下来运行可执行文件,就会执行定义的main函数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值