C++ 函数基础

函数 C++编程模块

主要内容

  • 1.基本知识
  • 2.函数原型
  • 3.按值传递函数参数
  • 4.设计处理数组的函数
  • 5.使用const 指针参数
  • 6.设计处理文本字符串的函数
  • 7.设计处理结构的函数
  • 8.设计处理string的函数
  • 9.递归函数,调用自身
  • 10.指向函数的指针

1 基本知识

完成C++函数,需要做到三点:

  • 定义
  • 函数原型
  • 调用

函数库中的函数

  • 标准库头文件提供函数原型

定义函数

函数可分为两个类别

  • 有返回值的类型,生成一个值返回给函数调用

    • 返回值可以是 常量,变量,表达式。

    • 返回值的限制:不能是数组。但是可以将数组作为结构和对象的组成部分。

  • 无返回值的类型 void 函数


2 函数原型和函数调用

函数原型常常隐藏在include文件中

为什么需要函数原型?

  • 举个栗子:

    让助理去某间办公室取得文件,则向助理和某办公室的人表明自己的意图,助理去完成这项工作的时候,一定会提高效率。

  • 同理

    • 原型描述了函数到编译器的接口,它将返回值的类型和需要参数的类型和数量告诉编译器,编译器就像某间办公室的工作人员一样,知道怎么把文件给那位助理。其实编译器做的工作非常多:编译器通过参数可以提前捕捉到参数类型的错误,编译器也知道怎么检索,检索多少字节来从放置返回值的内存块中取得返回值(函数进行运算之后会把返回值复制到指定的CPU寄存器或者内存单元中将其返回)。

    • 如果没有原型,编译器就需要从文件中进行查找,了解函数是如何定义的,而且函数也很有可能并没有在文件中。C++允许将一个程序放在多个文件中,单独编译文件,再将它们组合起来。如果不使用函数原型,就需要在函数使用之前定义它,但是这样并不是每次都可行,我们一般都把main函数放在最前面,它体现了程序的整体结构。

函数原型的语法

  • 函数原型是条语句,分号结束,不要求提供变量的名字,只提供变量的类型

函数原型的功能

  • 编译器正确处理函数的返回值
  • 编译器检查使用的参数数目是否正确
  • 编译器检查使用的参数类型是否正确,如果不正确,则转换为正确类型(如果可行)。

3 函数参数和按值传递

C++通常按值传递参数

  • 那两个曾经迷惑了多少初学者两个参数

    • 参数 argument 实参

    • 参量 parameter 形参

1
2
3
4
5
6
7
8
9
double cube(double); //不必要定义变量名字
int main(){

double v = cube(5); //5 表示传递给函数的值 argument 叫做参数

}
double cube (double x){ //x 表示接受传递值的形参 parameter 叫做参量
return x*x*x;
}

当函数被调用的时候,该函数会创建一个double类型的形参并赋值为 5

  • 还有个值得注意的地方:

    • 形参为 局部变量,是函数私有的,函数 调用 的时候创建,函数结束的时候 毁坏 变量,这样的叙述可能要为生动一些。这样的变量也叫作 自动变量 ,在程序执行的过程中自动被分配内存。
  • 一道中奖概率算法

    • 1-59 选 6 个数全中的概率。

    • R = (515049484746) / (654321)

    • 算法该 用 -00-151/650/549/448/347/246/1 这种交替乘除可以防止中间结果超出了最大浮点数。

函数和数组

10 函数指针

函数名 及为函数地址