什么是函数
在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
-----------------------------------------------------------------------------------------------------------------------------
1.库函数
比如我们在写c语言代码时,想把东西打印到屏幕上,会经常用到一个库函数printf,或者我们在计算一个数的几次方,会用到pow。如果我们每次写一个代码,这些函数都要由我们自己来完成,那么每个人写出的对于这一功能实现代码可能是不一样的,而每个程序员的能力不同,设计出来的函数算法也可能不同,为了支持可移植性和提高程序的效率,c语言就提供了库函数。
常见的库函数
IO函数 input output
字符串操作函数
内存操作函数
时间/日期函数
数学函数
其他库函数
---------------------------------------------------------------------------------------------------------------------------------
2.自定义函数
由自己来设计的函数,和库函数一样,有函数名,返回值类型和函数参数。格式如下:
[返回类型] [函数名]([参数类型1] [参数名1], [参数类型2] [参数名2], ...) { // 函数体:实现具体功能的代码 [return 返回值;] // 无返回值(void)时可省略return }若函数没有返回值,则在函数名前加加上一个void,而如果函数不需要给它传参数,可以在后面的括号里加void。
---------------------------------------------------------------------------------------------------------------------------------
实际参数(实参):
真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数,指针等无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了,因此形式参数只在函数中有效。
---------------------------------------------------------------------------------------------------------------------------------
传值调用和传址调用
现在写一个函数Swap,用来交换a和b的值。运行上述代码,发现a和b的值并没有交换。
这是因为x,y和a,b分别占有不同的内存块。假设他们的内存地址如下
虽然把a的值给了x,b的值给了y。但是因为他们所占有的内存块不同,所以对x,y的修改不会影响a和b。这种方法叫做传值调用,适合用于不会修改变量的函数,比如,写一个比较2个数大小的函数,只需要对变量的大小进行判断,而不需要对变量进行更改。
那如果想要交换a,b,我们可以怎么做呢?
我们可以把函数的地址给传给x,y,再用解引用操作符。这样就可以把函数内部的变量和函数外部长生联系。
这种方法叫传址调用,这种方法可以让函数和函数外边的变量建立起真正的联系。
---------------------------------------------------------------------------------------------------------------------------------函数的嵌套调用和链式访问
在 C 语言中,函数的嵌套调用指的是:在一个函数的函数体内部,调用另一个函数(甚至多个函数)的行为。简单来说,就是 “函数调用函数”。
注意:C 语言允许嵌套调用,但不允许嵌套定义
链式访问
把一个函数的返回值当作另一个函数的参数。多个函数调用像 “链条” 一样串联起来,无需借助临时变量存储中间结果。
---------------------------------------------------------------------------------------------------------------------------------
函数声明:
- 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是声明决定不了。
- 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
- 函数的声明一般要放在头文件中的。
函数定义:
函数的定义是指函数的具体实现,交待函数的功能实现。
---------------------------------------------------------------------------------------------------------------------------------