函数(1)
1. 函数是什么
-
维基百科中对函数的定义: 子程序
-
在计算机科学中,是一个大型程序的某部分代码,,由一个或多个语句快组成。它负责完成某项特点定任务
而且相较于其他代码,,具有相对的独立性。 -
一般会有输入参数并有返回值,提供对进程的封装和细节的隐藏,这些代码通常被集成为软件库。
-
函数的分类:
1.库函数
2.自定义函数 -
main函数的位置:C语言规定,在一个源程序中,main函数的位置:可以是任意的。 在执行一个c语言编写的程序时,main函数就相当于是执行程序的入口。 只要是没有语法和逻辑上的错误,main函数可以放在任意位置。 不论main函数在整个过程中的位置如何,一个C程序总是从mam函数开始执行的。 main函数,又称主函数,是C程序的入口函数,即程序的执行是从main函数开始,对其他函数的调动也是直接或间接地在main函数中被调用。 一个c程序有且仅有一个main函数,除main函数之外可以有若干个其它的函数,每个函数实现某一特定的操作。 程序执行总是从main函数开始,如果有有其他函数,则完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。 在执行程序时,由系统调用main函数 。
2.库函数
-
C语言中把常用的功能,进行了封装,封装成一个个的函数,提供出来大家都可以使用。
比如: scanf printf strlen strcmp rand srand time -
C语言 并不去直接实现库函数,而是提供了C语言的标准和库函数的约定,库函数的实现一般是由编译器去实现的
![](https://i-blog.csdnimg.cn/blog_migrate/91d7c871c079f112729aa0a6acd7be16.png)
- 注:使用库函数,必须包含#include对应的头文件。
- strcpy
![](https://i-blog.csdnimg.cn/blog_migrate/2e477e8e9b82fe0c228145813046dd06.png)
- memset
![](https://i-blog.csdnimg.cn/blog_migrate/836f373f23dbd3dc327cd8c5a7a9f32a.png)
3.自定义函数
自定义函数和库函数一样,有函数名,返回值类型和函数参数
//找出两个整数的最大值
![](https://i-blog.csdnimg.cn/blog_migrate/dee5ce984d3ecb0071ad716763f68f43.png)
//可以交换两个整型变量内容的函数
![](https://i-blog.csdnimg.cn/blog_migrate/0f212988bded8481c9dd0560ebd63fbe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e7dd09a28a3c019ad9aa9bed1c69887d.png)
- x,y 的交换,压根不会影响 a,b
改进:
首先是 a 的值放在 tmp 里 ; 第二步 *pb 赋值给 pa; 再把pb 的值 放在tmp里;实际上是交换三个变量的值;交换的是地址所指向的值的内容 ;地址是交换不了的。
![](https://i-blog.csdnimg.cn/blog_migrate/c9c50c078713f64f25091b780e92405c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/01f204bba2e9e44e59b2de028a82bb97.png)
达到了最终效果。
4.函数参数(形参名 和 实参名 可以相同 )
- 4.1
实际参数(实参)
真是传给函数的参数,叫实参。
实参可以是:常量,变量,表达式,函数等。
无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传送给实参。
![](https://i-blog.csdnimg.cn/blog_migrate/f776fe3e797e91808fd5a8ce928f7b1f.png)
- 4.2
形式参数(形参)
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数,形式参数当函数调用完成之后就自动销毁了。所以形式参数只在函数中有效。
5.函数调用
- 5.1 传值调用 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。 (在这种设计中,形参是实参的一份临时拷贝,对形参的修改不会影响实参。) - 5.2 传址调用 - 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。 - 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量(通过形参的指针就能够访问函数外部的变量,并进行操作。)
6.函数的嵌套调用和链式访问
- 6.1 嵌套调用
可以嵌套调用;但是不存在嵌套定义。 - 6.2 链式访问
把一个函数的返回值作为另一个函数的参数。
![](https://i-blog.csdnimg.cn/blog_migrate/540b0a1d179cab0e32883a574e265c70.png)
7.函数的声明和定义
-
7.1函数声明:
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
2.函数的声明一般出现在函数的使用之前,要满足先声明后使用。
3.函数的声明一般要放在头文件中的 -
7.2 函数的定义:
函数的定义是指函数的具体实现,交待函数的功能实现。
![](https://i-blog.csdnimg.cn/blog_migrate/88f676c6b67e2e089f4fd111d7ddba85.png)