目录
1. 什么是函数?
我们在数学中经常见到函数的概念,数学中的函数代表发生在集合之间的一种对应关系。那么C语言中的函数代表这什么呢?
维基百科中对函数的定义:子程序
在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
2. C语言函数的分类
1.库函数
2.自定义函数
2.1 库函数
库函数产生原因:在我们编程的过程中像运算、拷贝以及输出打印这些基础功能,它们并不是业务性代码。在开发过程中每个程序员都可能用得到,为了支持可移植性和提高代码的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。
对于库函数的学习推荐下面的一个网站:
https://cplusplus.com/reference/https://cplusplus.com/reference/通过这个网站我们可以通过查找库函数以及阅读文档的形式学习并且掌握库函数。
还有一点要注意的是当使用库函数的时候必须包含#include包含的头文件。
2.2 自定义函数
当然有库函数是远远不够的,自定义函数的函数名、返回值类型和参数都是由程序员自己来设计。这就给程序员很大的发挥空间,举例如下:
//乘法口诀表
//实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
//如:输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void math(int x)
{
int q = 1;
for (int i = 1; i <= x; i++)
{
for (q = 1; q <= x; q++)
{
printf("%d*%d=%d ", q,i, i * q);
}
printf("\n");
}
}
int main()
{
int n = 0;
scanf("%d", &n);
math(n);
return 0;
}
这就是通过要求来自行发挥设计的代码。
3. 函数的参数
1. 实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数的调用时,它们必须有确定的值,以便把这些值传给形式参数
2. 形式参数(形参):
形式参数是指函数后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元) ,所以叫形式参数。形式参数在函数调用完之后就自动销毁了。因此形式参数只有在函数中才有效。
我们可以简单的认为:形参实例化之后其实相当于实参的一份临时拷贝。
4. 函数的声明和定义
1.函数的声明
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数的声明决定不了。
2.函数的声明一般出现在函数的使用之前,要满足先声明后使用。
3.函数的声明一般要放在头文件中。
结构如下:
返回类型 函数名(形式参数);
2.函数的定义
函数的定义就是指函数的具体实现,交代函数的功能实现。
两个数字交换实例如下:
//交换两个整数
//作业内容
//实现一个函数来交换两个整数的内容
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swap(int* pa, int* pb)
{
int num = 0;
num = *pa;
*pa = *pb;
*pb = num;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
swap(&a,&b);
printf("%d %d", a, b);
return 0;
}
像上面的pa、pb就是形式参数,而传给swap的&a、&b就是实际参数。
5. 函数的调用
1.传值调用
函数的实参和形参分别占有不同的内存块,对形参的修改不会影响实参。
例如两个数字的相加,并没有对实参进行修改,代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int num = Add(a, b);
printf("%d", num);
return 0;
}
2.传址调用
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正联系,也就是函数内部可以直接操作函数外部的变量。
文章中第二段代码就是这种方式。
6. 函数的嵌套调用和链式访问
1.函数的嵌套调用
要注意的是函数可以嵌套使用,但是不能嵌套定义。
2.函数的链式访问
把一个函数的返回值作为另一个函数的参数。
举例如下:
这段代码的结果是:4321
这是因为printf函数的返回值是打印在屏幕上字符的个数。
今天分享到这里,希望大家一起提高!