1.函数的概念
在C语⾔中引⼊函数(function)的概念,有些翻译为:⼦程序,⼦程序这种翻译更加准确⼀些。
C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码。这段代码是有特殊的写法和调⽤⽅法的。C语⾔的程序其实是由⽆数个⼩的函数组合⽽成的,也可以说:⼀个⼤的计算任务可以分解成若⼲个较⼩的函数(对应较⼩的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以复⽤的,提升了开发软件的效率。
在C语⾔中我们⼀般会⻅到两类函数:
1.库函数
C语⾔标准中规定了C语⾔的各种语法规则,C语⾔并不提供库函数;C语⾔的国际标准ANSIC规定了⼀些常⽤的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现。这些函数就被称为库函数。我们之前学学习的scanf,和printf也是库函数。有了库函数,⼀些常⻅的功能就不需要程序员⾃⼰实现了,⼀定程度提升了效率;同时库函数的质量和执⾏效率上都更有保证。库函数相关头⽂件:https://zh.cppreference.com/w/c/header
库函数的学习和查看⼯具很多,⽐如:
C/C++官⽅的链接:https://zh.cppreference.com/w/c/header
cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/
注意:在使用库函数时一定要记住要包含头文件。
2.自定义函数
⾃定义函数其实更加重要,也能给程序员写代码更多的创造性。
自定义函数形式:
ret_type fun_name(形式参数)
{
}
1.ret_type 是函数返回类型。
2. fun_name 是函数名。
3. 括号中放的是形式参数。
4. {}括起来的是函数体 。
其实我们可以将函数想像为一个加工厂,我们输入原料(参数),生产出产品(计算结果)。
1.ret_type 是⽤来表⽰函数计算结果的类型,有时候返回类型可以是 void ,表⽰什么都不返回
2.fun_name 是为了方便使用函数;就像⼈的名字⼀样,有了名字方便称呼,函数有了名字方便调用,所以函数名尽量要根据函数的功能起的有意义。
3. 函数的参数就相当于,工厂中送进去的原材料,函数的参数也可以是 void ,明确表⽰函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数。
4.{}括起来的部分被称为函数体,函数体就是完成计算的过程。
2.创建一个函数
我们来试着写一个加法函数:
#include<stdio.h>
int Add(int x, int y)
{return x + y;}
int main()
{int ret =Add(3, 4);printf("%d", ret);return 0;
}
我们创建了一个Add函数,它的返回类型为int,参数有两个类型都为int。
当我们给它两个参数时,看看能不能得到结果,如我们输入3和4 。
在我们的这个代码中我们传入的3和4其实是实际参数,简称实参,x和y其实是形式参数,简称形参。
1.实际参数
实际参数就是真实传递给函数的参数。
2.形式参数
不会向内存申请空间,不会真实存在的,所以叫形式参数。形式参数只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形式的实例化。
3.形参和实参的关系
我们先来看下面的代码:
int Add(int x, int y)
{x++;y++;return x + y;}
int main()
{int a = 3;int b = 4;Add(a,b);printf("%d %d",a,b );return 0;
}
在上述代码中,我们将形参都加上1后,打印的结果会是什么呢?
为何结果还是3和4呢?其实形参只是实参的一份临时拷贝,所以改变形参时实参是不会改变的。
4.return语句
上述代码中可能有小伙伴就要问了,return x+y是啥?那我们就在这解释一下。
在函数的设计中,函数中经常会出现return语句,这里讲⼀下return语句使用的注意事项。
1. return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执行表达式,再返回表达式的结果。
2.return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况3.return返回的值和函数返回类型不⼀致,系统会自动将返回的值隐式转换为函数的返回型
4. return语句执⾏后,函数就彻底返回,后边的代码不再执行。 如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。
5.利用函数打印数组
void print(int arr[], int sz)
{for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}}
int main()
{int arr[] = { 1,2,3,4,5 };int sz = sizeof(arr) / sizeof(arr[0]);print(arr,sz);return 0;
我们创建了一个名为print的函数,因为我们只需要打印不需要返回,所以函数的返回类型为void,函数的参数为int arr[]和int sz。
