Hello 我们又见面了,今天我们要讲函数,在初识C语言中,我们讲过函数的一些基本点,现在我们重新认识函数,更深层次的掌握函数,下面开始我们今天的学习。
在数学中我们遇到的函数有一元一次,也有二元一次,大多数都是f(x)=ax+b这些,那我们在C语言中的函数是怎么样的呢,让我们来看看吧。
1.函数是什么?
维基百科中对函数的定义:子程序
- 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,
subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。 - 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
2.C语言函数的分类
- 库函数
指放在C语言中的函数,这些函数都是经过别人编出为了统一代码而经常用到的函数,供大家使用,我们在用的时候只有包含相对于的头文件就行了。
1.IO函数
2.字符串操作函数
3.字符操作函数
4.内存操作函数
5.时间/日期函数
6.数学函数
7.其他库函数
以上就是我们经常用到的库函数,推荐几个网站给大家查阅库函数
网址
看到这里大家是否有疑问,那就是为什么要有库函数
举个简单的例子,就像我们输入printf和输出scanf,如果我们每次要用到他们的时候,都要用代码来代替,现在放入C语言中就可以直接拿出来使用,大大的增加效率。
这是我们一部分头文件,当我们要用库函数的时候,必须要加上头文件,比如我们最简单的#include,我们的输入输出函数就要需要用到
#include<stdio.h> int main() { printf("你们真帅啊!"); return 0; }
在上面的认识下,现在来教大家怎样学习函数,充分利用工具
上面用的是MSDN一个小工具,大家也可以下载使用
这是需要包含的头文件
看到这里我们只是知道该输入什么在这个函数,但是我们还不知到他是用来干嘛的。这个时候我们可以看下面的注释
看到上面都是英文我们大家可能都会头疼,但是小编提醒大家英语不好就不是你不好好敲代码的理由,我们大家可以查阅字典,在这里小编和大家一起加油
我们可以看到Remarks中including the terminating null character说明在传字符的时候包括’\0’也会传过去我们在看下面的这个例子
#include <string.h> #include <stdio.h> void main( void ) { char string[80]; strcpy( string, "Hello world from " );//将Hello world from放入string,并且from后面有\0 strcat( string, "strcpy " ); strcat( string, "and " ); strcat( string, "strcat!" ); printf( "String = %s\n", string ); } //String = Hello world from strcpy and strcat!这是输出
讲到这里大家应该对我们使用工具有一点了解,以后大家在读别人文章的时候遇到不认识的函数大家也可以这样动手查阅,好好利用工具,对我们的学习也有帮助。
- 2自定义函数
在上面我们看到这么多的头文件,那就说明有好多库函数,但是为什么有那么多函数,我们还要自己写函数,因为我们是以后未来要当程序员,如果库函数就能满足需求的话,那就不需要程序员。
ret_type fun_name(para1, * ) { statement;//语句项 } //ret_type 返回类型 //fun_name 函数名 //para1 函数参数
这是函数的组成,下面我们自己敲代码写一个函数,函数目标是求两个数的较大值
#include<stdio.h> int max(int x, int y) { if (x > y) return x; else return y; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b);//输入两个数 int c = max(a, b); printf("%d\n", c); return 0; }
这是一个简单的代码来比较较大值,这个在初识C语言中也讲过,现在我们换个更难的例子
交换两个数
void swap(int x, int y)//不需要返回值用void { int tmp = 0; tmp = x; x = y; y = tmp; } int main() { int a=10; int b = 20; printf("交换前:a=%d b=%d\n",a,b); swap(a, b); printf("交换后:a = % d b = % d\n", a, b); return 0; }
怎么回事,我们明明在函数交换中写了交换,但是他还是没有交换,这是为啥!!!
原因是我们的程序有bug,下面我们来仔细讲解这个代码
在调试过程中,我们可以看到a,b的值还有a,b的地址,接下来我们进入函数内部
我们可以发现函数值是一样的并且在我们调试过程中,xy也发生交换,但是最重要的一点是我们可以发现他们的地址不一样,所以我们在函数里的交换根本不会影响a和b的值