大家好,我是小锋,今天给大家讲解的是函数。
什么是函数
维基百科中对函数的定义:
子程序
在计算机科学中,子程序(英语:
Subroutine, procedure, function, routine, method,
subprogram, callable unit
),是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软
件库。
库函数
在C语言创建之初是没有库函数的,但是程序员在编写代码时有一些需是经常需要的每次需要都重新编写代码不免有些繁琐,再加上每个人写代码的风格不同就容易产生bug,所以C语言就将我们常用的功能搜集起来并实现,而这些函数就叫做库函数。
库函数多种多样我们不需要全部记住,用的多了自然而然就记住了,查询库函数我们在
http://zh.cppreference.com
中查询,下面我来给大家讲解一下怎么学习库函数。
学习函数我们主要从 函数名,返回类型,所需参数,头文件,函数作用,这几个点来学习
下面给大家举个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/2d93cdf6582626e22fecffb1845438a6.png)
返回类型:函数结束时返回值的类型(这里的void*意思是返回一个不知道是什么类型的指针)
函数参数:是函数实现所需要的参数(这里size_t是无符号整型)
头文件:使用库函数,必须包含 #include 对应的头文件。
自定义函数
自定义函数和库函数一样,有函数名,返回值类型和函数参数。 但是不一样的是这些都是我们自己来设计。
我们举一个例子:
写一个函数可以找出两个整数中的最大值。
![](https://i-blog.csdnimg.cn/blog_migrate/3ba24aa3a04dd5dfd7bf8c4c94a044c5.png)
这里定义一个变量c用来储存函数的返回值。
再举个例子:
写一个函数可以交换两个整形变量的内容。
![](https://i-blog.csdnimg.cn/blog_migrate/a8c0c727869bd10bc209834e384b8ba3.png)
这里我们明明调用了函数并进行了交换,为什么a和b的内容没有交换。、
我们调试看看
经过调试我们可以看到变量a,b与变量x.y的地址并不相同(&的作用是取出地址)说明x.y与a.b所对应的并不是同一个空间,x.y交换的内容自然就不是a.b中的内容 。
这里我们就要讲到形参与实参了
实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内
存单
元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有
效。
这里我们可以看到 add
函数在调用的时候,
x
,
y
拥有自己的空间,同时拥有了和实参一模一样的内容。,所以我们可以简单的认为:形参实例化之后其实相当于实参的一份临时拷贝,对形参的修改不会影响实参的内容
函数的调用
传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
传址调用
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操
作函数外部的变量。
所以要让函数中的x.y交换内容时a.b也同样交换内容我们应该采用传址调用
所以上面的例题应该这样写
![](https://i-blog.csdnimg.cn/blog_migrate/946e654af0d7523a9c898b8fccd59c3c.png)
以上就是全部内容了,如果有错误或者不足的地方欢迎大家给予建议。
![](https://i-blog.csdnimg.cn/blog_migrate/366b8a37c02a1a4a2e7fab381d41428d.png)