函数的基本用法
函数是一个完成特定功能的代码模块使这个程序代码独立通常有返回值但也是可以是空值
函数的一般性形式为:数据类型+函数名称(参数)
int max(int a,int b)
在参数这个模块中分为实参和形参,实参就是已经被赋予实际值得数据,形参就是一个模糊的数据是还没有被赋予实际的值的数据。
前面呢数据类型,是指整个函数的反回值类型,一般有返回值类型的函数,最后就应该加return用来返回一个值,并且这个值的数据类型要和函数的数据类型一致。
如果没有返回值函数的数据类型可以写为void
在参数这中,形式参数的说明可以省略说明的变量名称,但类型不能缺省,说白了就是这个变量的名字可以省略但是这个变量的类型不能省略
在一个程序中必须要有一个主函数和若干个子函数,主函数只能有一个而此函数可以由若干个子函数负责被主函数调用,所有的程序都是从主函数的上面运行到下面。所有的子函数是相互平行和独立的,函数不能嵌套定义。函数间可以相互调用,但不能调用main函数。main函数是系统调用的。
函数的调用
5.从用于角度来看,函数有两种。
从用于角度来看,函数有两种
第一种,标准函数:库函数,这是由系统提供的,不必自己定义这些函数,可以直接使用它们,不同的C系统提供的库函数的数量和功能会有一些不一样,当然许多基本的函数是共用的。例如常用的printf,scanf,但需要注意的是要用这些函数需要用头文件文件
第二种,用户自己定义的函数。用以解决用户的专门需要。例如我们上面那幅图定义的两个函数。调用了三次,所以对应的也会输出三次。
从函数形式看函数也会分为两类,第一个是无参函数,第二个是有参函数。无参函数就是参数为一个空值,他不需要向被调用函数传输一些数据,像我们上幅图一样,有参函数就是需要通过参数向被调用的函数传递数据,一般情况下执行被调函数会得到一个函数值供主调函数使用。如下图
还有一个重要的点就是函数的声明,函数的声明就意思是告诉主函数这个程序需要调用其他的函数来执行,在我们进行函数声明的撰写时我们需要注意一定要在函数名的后面加 ;因为它是一个独立的语句。
在这里我们需要区别一下函数的定义和函数的声明,函数的定义是独立于主函数之外的一个自我定义的函数,函数的声明是告诉主函数我们调用了这个此函数他的信息。
还有一个小的注意点,就是如果我们定义的函数体在们主函数的上面,也可以不使用函数的声明,但这一般不用,有的时候怕我们遗忘。
函数的嵌套调用
大概的知识点就有以上那么多了下面我会给大家几个例子来训练一下
通过递归求阶乘
C语言中在调用一个函数的过程中有直接或间接的调用函数本身就叫做函数的递归
数组元素作为函数实参
有几个知识点需要大家记一下
数组可以作为函数的参数使用进行数据传送,数组用作函数的参数有两种形式。第一种是把数组元素作为实参使用,另一种是把数组名作为函数的形参和实参使用。
当数组元素作为函数的实参时,数组元素作为函数的实参使用与普通变量是完全相同的。在发生函数调用时,把作为实参的数组元素值传送给形参实现传递。
当用数组名作为函数参数与用数组元素作为实参有几点不同,当我们用数组元素作为实参时只要数组类型和函数的形参变量类型是一致,不要求函数的形参也是下标变量。
当我们用数组名作为函数参数时,要求形参和相对于实参都必须是类型相同的,数组都必须有明确的数组说明,当形参与实参二者不一致时就会发生错误。
形参变量和实参变量是由编译系统分配的两个单元,在调用时是把实参变量的值赋予给形参变量。用数组名作为函数参数时,不是进行值的传递不是把每一个元素的值都赋予给形参变量的各个元素,而是地址传递,因为实际上形参数组并不存在,编译系统不为其分配内存。
局部变脸和全局变量
所谓结构变量就是在一个函数内部定义的变量,它只在本函数范围内有效,也就是说在本函数中才能使用在,此函数以外不能使用这些变量。
全局变量,就是在这个程序下面都可以使用的变量
一般情况下我们很少使用全局变量,全局变量在程序的全部执行过程中都会占据存储单元,而不是需要的时候才会开辟单元使用,全局变量过多会降低程序的清晰性,很难判断出每个瞬间各个外部变量的值,在执行时可能会改变外部变量的值,程序容易出错,所以我们要尽量减少使用。
内部函数和外部函数
函数的本质上是全局,因为一个函数被另外一个函数调用,也可以指定函数不能被其他文件调用,所以我们根据函数能否被其他文件调用将函数区分为内部函数和外部函数。
如果一个函数只能被本文件中其他函数调用,称为内部函数在定义内部函数
在函数名和函数类型前面加static
static int fun(int a,int b)
这样函数fun就可以为其他文件调用,C语言规定,如果定义函数前忽略extern,则隐含为外部函数,前面所的函数是外部函数。
在需要调用此函数的文件中,用extern对函数做声明,表示该函数是在其他文件中定义的外部函数。