1.简介
函数,相信大家在数学领域中早已或多或少地对函数有了一些了解和学习,与数学领域不同,在c语言中将函数定义为完成特定任务的独立程序代码单元。
2.函数的作用
为什么要使用函数呢?首先,使用函数可以省去编写重复代码的苦差,如果程序要多次完成某项任务,那么只需要编写一个合适的函数。其次,使用函数能够提高代码的可读性,更方便后期的修改和完善。
3.两种函数类型
在c语言中,一共有两种函数类型,一种是c语言自带的库函数,另一种是需要程序员自己编写的叫自定义函数。
库函数
下面我们先来认识一下c语言的库函数的使用,使用c库函数需要包含相应的头文件。以下是几种常用的头文件和它们的功能:
1、<stdio.h>:
提供输入和输出功能的函数,例如printf()
、scanf()
、fopen()
、fclose()
等。2、
<stdlib.h>:
提供通用工具函数,如动态内存分配malloc()
、free()
)、程序退出(exit()
)、随机数生成(rand()
、srand()
)等。3.
<string.h>:
提供字符串处理函数,如字符串复制(strcpy()
)、连接(strcat()
)、比较(strcmp()
)、长度计算(strlen()
)等。4、
<math.h>:
提供数学运算函数,如平方根(sqrt()
)、幂运算(pow()
)、三角函数(sin()
、cos()
、tan()
)等。5、
<ctype.h>:
提供字符处理函数,如字符分类(isalpha()
、isdigit()
、islower()
)、字符转换(toupper()
、tolower()
)等。6、
<time.h>:
提供时间和日期处理的函数,如获取当前时间(time()
、localtime()
)、时间差计算(difftime()
)等。
如果大家对c库函数有兴趣,也可以跳转到下面这几个网站进行学习查询,这里就不再做过多赘述:
http://www.cppprefence.com(可以切换中文用起来比较方便)
还有另一种方法不需要网络也可以使用,但是需要下载MSDN,下面是另一位博主的下载教程的博客(附带使用说明):
https://blog.csdn.net/why1472587/article/details/124825657
自定义函数
自定义函数,顾名思义:就是由程序员自己定义的函数,自定义函数相比库函数更加灵活多变,能解决的问题也自然更多。下面是一个自定义函数的结构表示:
上述的自定义函数能够完成两个数大小的比较,具体代码如下:
#include <stdio.h>
int MAX(int x, int y) {
return x > y ? x : y;
}
int main()
{
int m = 10;
int n = 20;
int max = MAX(n, m);
printf("%d", max);
return 0;
}
4.函数的实参与形参
函数的内部有实际参数(实参)和形式参数(形参)两种参数,用简单的话描述:调用函数时的参数为实参;函数中定义的参数为形参。
下面我们通过两串代码来剖析实参和形参(代码功能:交换两个数的位置)
注意:这是一段错误的代码,它无法交换两个数。
#include <stdio.h>
void Change(int m,int n) //行参
{
int tmp = 0;
tmp = m;
m = n;
n = tmp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:%d %d\n", a, b);
Change(a, b); //实参,传值调用
printf("交换后:%d %d\n", a, b);
return 0;
}
可以看到这串代码并没有完成任务,下面我们通过监视来看看程序中错误的原因:
可以看到,程序将实参a、b的值传递给了形参m、n,但他们的存储地址并不相同,虽然在函数中,m、n的值做了交换(在函数调用后m、n销毁),并没有影响到实参a、b。
由此可知,实参在调用时必须要有确定值,它可以是值、表达式、变量、函数;而形参在函数调用时才实例化(分配内存单元),在函数调用完后销毁,它只在函数中有效。
那么我们应该如何让a、b的值交换呢?别急,让我们继续往下看!下面我们将讲述函数的另一种调用方式,他就能够使a和b的值调换。
5.函数的调用方式
刚才的代码我们使用的调用函数为传值调用,由刚才的调试可知:它使实参和形参分别占有不同的内存块,对形参的修改并不能影响实参。
下面我们介绍另一种函数调用方式,传址调用:它将函数外部创建变量的内存地址传递给函数参数,这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部直接操作函数外部。使用它就可以交换刚才a和b的值。
正确代码:
#include <stdio.h>
void Swap(int *pa, int *pb) //行参
{
int tmp = 0;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:%d %d\n", a, b);
Swap(&a, &b);//实参,传址调用
printf("交换后:%d %d\n", a, b);
return 0;
}
看到这里,希望大家能给博主点一个免费的三连,博主在此跪谢大家了!
标签:函数,形参,int,参数,实参,库函数,自定义 From: https://blog.csdn.net/CxK6666667/article/details/142748804