一.函数的概念讲解
函数这个词我们并不陌生,从小学到初中、高中,甚至在大学里我们也一直在学习它的知识,“对于在某区间上的每一个确定的x值,y都有一个确定的值,那么y叫做x的函数。--这是我们在学习数学的过程中对于函数的理解,可以通过一个甚至多个变量,通过内部的结构创建出一个神奇的,科学的值。
而在计算机编程语言中,函数也占有十分重要的地位。它是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
既然数学领域中的函数都含有三个要素:定义域A、值域B和对应法则f。 那么编程语言中的函数也比例外,它也有独特的三个方面:函数名,函数的返回值类型以及函数的参数。
函数的组成如下:
二.函数的类型
1.一般是指编译器提供的可在c源程序中调用的函数。可分为两类:
一类是c语言标准规定的库函数,
一类是编译器特定的库函数,人们大多称它为自定义函数。
2.库函数
在C语言早期发展的过程中,那时由于只有简单的一些功能,各公司在编程的时候,用了大量的语句代码去实现所要完成的功能,每实现一种功能就要输一遍这种功能,多次实现便会造成代码的大量冗余,还会花费大量的时间与空间。就好比以下代码,每交换一次两变量的值,就要使用那三行代码的功能。
int main() {
int a = 10;
int b = 20;
int tmp = 0;
tmp = a;
a = b;
b = tmp;
printf("a:%d,b:%d\n", a, b);
int c = 50;
int d = 40;
tmp = c;
c = d;
d = tmp;
printf("c:%d,d:%d\n", c, d);
return 0;
}
后来开发C语言的公司便创造出了一个库函数,库函数(Library function)是将函数封装到库中,供用户使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用,程序员只用一行代码就能调用多行代码创造出来的功能。C的库函数极大地方便了用户,同时也补充了C语言本身的不足。事实上,在编写C语言程序时,应当尽可能多地使用库函数,这样既可以提高程序的运行效率,又可以提高编程的质量。
但是库函数必须知道的一个秘密就是:使用库函数,必须包含 #include 对应的头文件。
上图就是C语言的众多函数库,里面包含了大大小小的函数,而我们常用的库函数如下
C语言常用的库函数都有:
- IO函数
- 字符串操作函数
- 字符操作函数
- 内存操作函数
- 时间/日期函数
- 数学函数
- 其他库函数
我来列举两个常见的例子:
2.1 strcpy字符串拷贝函数
通过上图的讲解,我们便可以知道是将源头的字符串内容可以拷贝到目的地的字符串中,两个函数参数都是char型指针,表明它只适合用在字符类型的数组中。而且返回值的类型也是char型。它所需要引用的头文件为:#include<string.h>
//常见库函数例子1.strcpy字符串拷贝函数
int main() {
char a1[] = "hello!";
char a2[] = "#########";
strcpy(a2, a1);
printf("%s\n", a2);
return 0;
}
代码讲解:在strcpy函数中,第一个参数是a2,第二个参数是a1,表明是把字符串a1中的所有字符全都放进a2中,结果也为hello!与a1数组的内容完全一致。有的人会问为什么不是
"hello!###",它拷贝了六个字符,后面剩余的几个#号为啥没有显示出来?
原因就在于:strcpy会把“hello!的 '\0' 结束符也拷贝过来,所以是一共拷贝了7个字符,
当strcpy在遇到'\0'字符时便会终止当前拷贝并且结束,所以剩下的#号直接就不会被打印出来了。
2.2 memset内存设置函数
memset函数的用法就是将dest所指的前count字节的内存空间赋值为c。
//常见库函数例子2.memset字内存设置函数
int main() {
char a1[] = "Hello World!";
memset(a1,'*',5);
printf("%s\n", a1);
return 0;
}
这组代码中memset函数是将a1字符串数组中的前5个字节内容,转换为'*'号,memset函数中第一个参数是空类型的指针,也就是说它可以用来转换任何类型的指针或者数组,不像strcpy只限于char型,第二个参数是要进行转换成为的内容,第三个参数就是要数组进行转换的前n个字节数。
2.21自定义函数
自定义函数往往是自己编译函数的实现,当程序员有自己的想法或者设计思路时,可以创建更加独特,方便的函数去实现所要完成的功能,库函数是有限的,而程序员的思维是无限的,所以更加重要的是自定义函数。 自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。
我仍是来列举一个自定义函数的例子
1.通过自定义函数来比较两个数的较大值
//自定义函数
int get_max(int x, int y) {
if (x > y)
return x;
else
return y;
}
int main() {
int a = 10;
int b = 20;
int max = get_max(a, b);
printf("%d\n", max);
int max2 = get_max(100, 300);
printf("%d\n", max2);
return 0;
}
代码讲解:在主函数中定义了两个变量,并且将两个变量a,b放进了自定义函数的实参中,通过实参去放进函数的形式参数x,y中,利用max去接收函数的返回值。在get_max函数中利用了if else语句去比较了两个数的大小,通过return较大的那个数返回到主函数的max中完成功能的实现。
int get_max(int x, int y) {
return (x > y) ? (x) : (y);
}
int main() {
int a = 10;
int b = 20;
int max = get_max(a, b);
printf("%d\n", max);
int max2 = get_max(100, 300);
printf("%d\n", max2);
return 0;
}
其实自定义函数的好处就在于可以有多种实现函数的方式,例如上图,get——max函数便是用到了三目运算的方式去完成实现,更加简洁明了 。
以上就是函数的两种类型,希望对你们有所帮助! 未完,待续!hhh