Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说快速上手系列-C语言之函数,希望能够帮助你!!!。
上篇写了C语言中的数组,那接下来就到函数了吧。
函数是C语言程序的基本模块,通过对函数模块的调用实现特定的功能。每个 C 程序都至少有一个函数,那就是主函数 main() ,C语言不仅提供极为丰富的库函数,还允许用户建立自己定义的函数,就是说所有的C程序都可以定义其他额外的函数。比如,用户可把自己的算法编成一个个相对独立的函数模块,通过调用的方法来使用函数。
函数繁多,至于有哪些种类,其实分类没有什么严格意义上的原则,一切以函数完成的功能为前提,如:
从函数定义的角度看,函数可分为:
从函数的返回值看,函数可分为:
从函数是否需要参数看,函数可分为:
函数的定义
说明:[返回类型]:函数可以返回一个值。这里[返回类型]是函数返回的值的数据类型,有些函数执行的时候只需要让它实现某种功能,而不需要返回值,在这种情况下,返回类型为void。
函数名:用户定义的标识符,代表函数的首地址。
参数:在调用函数时,我们可以向函数传递一个或多个参数。参数是可选的,也就是说,函数可以不包含参数。
函数主体:执行语句,即函数执行任务的语句。
举个例子,这个函数没有参数,也没有返回值,如:
再比如,有返回值也有参数的:
注意:
1、函数在被调用之前,形参(如图中定义的max()函数的参数a,b )不占用内存;
2、实参可以是常量、变量或表达式;
3、必须指定形参的类型;
4、实参对形参的参数传递是“值传递”,即单向传递,如上面例子,调用max()函数时,传递的是a和b的值,调用完max()函数之后a和b本身的值是不变的。
函数的声明
1、函数的声明和定义是不同的
2、C语言不允许嵌套定义,如定义一个函数的内部又定义其他函数。
3、C语言允许函数的嵌套调用,在一个被调函数中又调用其它函数及递归调用。
4、主函数与被调函数在同一个文件中时:
max()返回int型,不声明可以直接使用
5、主函数与被调函数不在同一个文件中时,调用前必须进行函数声明。
来看个函数声明的例子:
内部函数与外部函数:
内部函数:一个源文件中定义的函数只能被本文件中的函数调用,而不能被其它文件中的函数调用
外部函数:外部函数在整个源程序中都有效
就写这么多吧,对了,在写函数定义的时候提到了形参,那就在简单了解下吧。
如 int max(int a, int b)函数中,a,b就是形参,就是说如果函数需要使用参数,我们必须声明接收参数的变量,这些个变量就是函数的形式参数。形参的生命周期和我们定义的函数相关,在进入函数时被创建,退出函数时被销毁,如同函数内的其他局部变量。
说到参数,还得说说参数的两种传递方式,即值传递和引用传递
值传递:函数调用时把实参的值传给函数的形参,这时,在函数内部修改形参的值,不会影响实参的值,即改变形参的值,实参的值不会改变。如:
说明:定义了一个函数hello(),在main函数中定义变量a和b,a和b即为实参,初始值a为2,b为1,在hello函数中,改变传进来的a和b的值,a变为100,b变为200,在调用hello()函数后进行打印,打印结果还是a为2,b为1,这就说明值传递时,改变形参的值,实参的值不会发生改变。
引用传递:通过指针传递参数的一种方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作,如
说明:定义了一个函数hello(),在main函数中定义变量a和b,a和b即为实参,初始值a为2,b为1,传递参数时我们传递a和b的地址,即&a,&b,hello()函数形参为指向实参地址的指针,我们在函数内部对形参指针变量进行赋值,a变为100,b变为200,在调用hello()函数后进行打印,打印结果a变为为100,b变为200,这就说明引用传递时,对形参的指向操作,就相当于对实参本身进行的操作,即改变形参的值,实参的值也会随之改变。
下一篇简单写写C中变量的存储类别(也就是变量的作用域)方面相关知识,想了解的小伙们可以关注
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章