1.函数的定义
函数的定义是*子程序*。子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,他负责完成某项特定的任务,而且相较于其他的代码,具备相对的独立性。
(一个功能模块,完成某项功能的模块)
2.函数的分类
①库函数
函数只要把参数规定死了。 返回类型规定死了。函数名规定死了,那他的使用方法肯定就是一模一样了,库函数的出现让我们代码的开发效率变高了。 代码更加标准化了。
常用的库函数有: IO函数、字符串操作函数、字符操作函数、时间/日期函数、数学函数、内存操作函数。
(注:库函数的使用必须包含对应的头文件)
https://www.dotcpp.com/course/lib/通过这个网站可以查询相应库函数。
②自定义函数
库函数是系统给定的函数,自定义函数是由程序员自己设计,自定义函数与库函数一样,有函数名返回值类型和函数参数。
举例:
如图,我们自定义一个函数,用于交换变量,但需注意,我们可有多个函数,主函数只有main函数一个;函数的位置不做规定,但程序只会从main函数开始,到main函数结束。
3.函数的参数
实际参数(实参):
①真实传给函数的参数,叫实参。
②实参可以是:常量、变量、表达式、函数等。
③无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
形式参数(形参):
①形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元)所以叫形式参数。
②形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
上面 swap1和 swap 函数中的参数 x , y , p_x , p_y 都是 形式参数 。在 main 函数中传给 swap1 的 a , b和传给 swap 函数的 &a , &b 是 实际参数 。
这里我们对函数实参和形参进行分析:
这里可以看到 swap1函数在调用的时候, x , y 拥有自己的空间,同时拥有了和实参一模一样的内容。所以我们可以简单的认为: 形参实例化之后其实相当于实参的一份临时拷贝 。
4.函数的调用
1>传值调用 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
2>传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量