您的位置 首页 > 娱乐休闲

快速上手系列-C语言之函数

上篇写了C语言中的数组,那接下来就到函数了吧。

函数是C语言程序的基本模块,通过对函数模块的调用实现特定的功能。每个 C 程序都至少有一个函数,那就是主函数 main() ,C语言不仅提供极为丰富的库函数,还允许用户建立自己定义的函数,就是说所有的C程序都可以定义其他额外的函数。比如,用户可把自己的算法编成一个个相对独立的函数模块,通过调用的方法来使用函数。

函数繁多,至于有哪些种类,其实分类没有什么严格意义上的原则,一切以函数完成的功能为前提,如:

从函数定义的角度看,函数可分为:

  • 库函数和用户定义函数(系统调用、API用户编程接口)

从函数的返回值看,函数可分为:

  • 有返回值函数和无返回值函数

从函数是否需要参数看,函数可分为:

  • 无参函数和有参函数

函数的定义

  • [返回类型] 函数名(参数)
  • {
  • 函数主体/执行语句部分;
  • }

说明:[返回类型]:函数可以返回一个值。这里[返回类型]是函数返回的值的数据类型,有些函数执行的时候只需要让它实现某种功能,而不需要返回值,在这种情况下,返回类型为void。

函数名:用户定义的标识符,代表函数的首地址。

参数:在调用函数时,我们可以向函数传递一个或多个参数。参数是可选的,也就是说,函数可以不包含参数。

函数主体:执行语句,即函数执行任务的语句。

举个例子,这个函数没有参数,也没有返回值,如:

  • void my_hello_fn ( void )
  • {
  • int num = 10;
  • printf(“num = %d\n”,num);
  • }

再比如,有返回值也有参数的:

注意:

1、函数在被调用之前,形参(如图中定义的max()函数的参数a,b )不占用内存;

2、实参可以是常量、变量或表达式;

3、必须指定形参的类型;

4、实参对形参的参数传递是“值传递”,即单向传递,如上面例子,调用max()函数时,传递的是a和b的值,调用完max()函数之后a和b本身的值是不变的。

函数的声明

1、函数的声明和定义是不同的

  • 函数定义是指对函数功能的确立:指定函数名,函数返回值类型,参数类型、函数体。
  • 函数声明只对已定义的函数进行说明,包括函数类型名函数名、括号、参数类型、参数名。

2、C语言不允许嵌套定义,如定义一个函数的内部又定义其他函数。

3、C语言允许函数的嵌套调用,在一个被调函数中又调用其它函数及递归调用。

4、主函数与被调函数在同一个文件中时:

  • 被调函数在主函数之前定义,不需要声明
  • 库函数不需要声明,但必须用include包含头文件
  • 其它情况在进行函数调用之前必须进行声明操作
  • 在有些编译器中,被调函数返回值类型为int、long、float时不需要声明,如:

max()返回int型,不声明可以直接使用

5、主函数与被调函数不在同一个文件中时,调用前必须进行函数声明。

来看个函数声明的例子:

内部函数与外部函数:

内部函数:一个源文件中定义的函数只能被本文件中的函数调用,而不能被其它文件中的函数调用

  • 定义形式:static 类型说明符 函数名(形参表)

外部函数:外部函数在整个源程序中都有效

  • 定义形式:extern(可省略) 类型说明符 函数名(形参表)
  • 注:在函数定义中如没有说明extern或static则默认隐含为extern

就写这么多吧,对了,在写函数定义的时候提到了形参,那就在简单了解下吧。

如 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中变量的存储类别(也就是变量的作用域)方面相关知识,想了解的小伙们可以关注

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“c语言函数形参初始值如何声明,c语言函数大全及详解,c语言函数流程图怎么画”边界阅读