C语言基础-函数

自创函数

C语言提供了大量的库函数: 比如 stdio.h 提供输出函数

自定义函数的一般形式:

C语言基础-函数

注意:

  1. [] 包含的内容可以省略,数据类型说明省略,默认是 int 类型函数; 参数省略表示该函数是无参函数,参数不省略表示该函数是有参函数;
  2. 函数名称遵循标识符命名规范;
  3. 自定义函数尽量放在 main 函数之前,如果要放在main函数后面的话, 需要在main函数之前先声明自定义函数,声明格式为:
    [数据类型说明] 函数名称([参数]);

函数调用 

我们需要用到自定义的函数的时候,就得调用它,那么在调用的时候就称之为函数调用

在C语言中,函数调用的一般形式为:

函数名([参数]);

注意:

  • 对无参函数调用的时候可以将()包含的省略
  • ()中可以是常数,变量或其它构造类型数据及表达式,多个参数之间用逗号分隔。

有参与无参

在函数中不需要函数参数的称之为无参函数,在函数中需要函数参数的称之为有参函数。

有参和无参函数的一般形式如下:

C语言基础-函数

有参函数和无参函数的唯一区别在于:函数 () 中多了一个参数列表。

  • 有参函数更为灵活,输出的内容可以随着n的改变而随意变动,只要在main函数中传递一个参数就可以了
  • 而在无参函数中输出的相对就比较固定,当需要改动的时候还需要到自定义的方法内改变循环变量的值。

形参与实参

函数的参数分为形参实参两种。

  • 形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
    • 就类似小明,说了的话而不实际行动;
  • 实参是在调用时传递该函数的参数。
    • 就如小刚能实际行动起来。

函数的形参和实参具有以下特点:

  • 形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。
  • 函数调用结束返回主调函数后则不能再使用该形参变量。

  • 实参可以是常量、变量、表达式、函数等。
  • 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。
  • 在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。

C语言基础-函数

 

函数的返回值

函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。

函数的返回值要注意以下几点:

  • 函数的值只能通过return语句返回主调函数。
return 表达式 或者为: return (表达式);
  • 函数值的类型和函数定义中函数的类型应保持一致。
    • 如果两者不一致,则以函数返回类型为准,自动进行类型转换。
  • 没有返回值的函数,返回类型为 void

注意:

  • void 函数中可以有执行代码块,但是不能有返回值.
  • void函数中如果有return语句,该语句只能起到结束函数运行的功能。其格式为: return;

内部函数与外部函数

  • 在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:
    static [数据类型] 函数名([参数])
  • 这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。
  • 在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:
    extern [数据类型] 函数名([参数])
  • C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。

静态变量只赋值一次

外部函数练习

 hello.c

#include <stdio.h>
#include "test.c"   //引用test.c文件
extern void printLine()     //这里定义的方法对吗?
{
   printf("**************\n");   
}
int main()
{
    say();
    return 0;
}

test.c

#include <stdio.h>
void printLine();
static void say(){
printLine();
printf("I love imooc\n");
printf("good good study!\n");
printf("day day up!\n");
printLine();
}

对于hello.c来说,直接引入了test.c文件。那么就可以调用testc中的static方法say()
而对于test.c并没有引入,可以通过声明来调用另一个源文件中暴露出来的方法。

输出:

**************
I love imooc
good good study!
day day up!
****************************
I love imooc
good good study!
day day up!
**************

相关推荐