C语言入门编程学习——函数

C语言函数是一组一起执行一个任务的语句。每个C程序都至少有一个函数,即main()主函数,所有简单的程序都可以定义其他额外的函数。

函数申明告诉编译器函数的名称,返回类型和参数。函数定义提供了函数的实际主体。

1. 定义函数

以下是max( )函数的源代码,会返回这两个数中较大的那个。

int max(int num1,int num2)

{

   int result;     //局部变量申明

   if(num1 > num2)

       result = num1;

   else

       result = num2;

   return result;

}

C语言中,函数是由一个函数头和一个函数主题组成。

    (1)返回类型:一个函数可以返回一个值。return_type是函数返回值的类型。有些函数执行所需的操作二部返回值,在这种情况下,return_type是关键字void

    (2)函数名称:是函数的实际名称,函数名和参数列表一起构成了函数签名。

    (3)参数:参数就像是占位符,当函数调用时,向函数传递了一个值,这值被称为实际参数,参数列表包括函数参数的类型,顺序,数量,参数是可选的,也就是说,函数可能不包含参数。

    (4)函数主体:包含一组定义函数执行任务的语句。

2. 函数声明

函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

针对上面定义的max()函数,以下是函数声明:

int max(int num1int num2);

在函数申明中。参数的名称不重要,只有参数的类型是必须的,因此可修改函数申明:

int max(intint );

在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必须要的,在这种情况下,应该在调用函数的文件顶部声明函数。

3. 调用函数

创建C函数时,会定义函数做什么,然后通过调用函数来完成以定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,需要传递其所需的参数;如果函数有一个返回值,则可以接收其返回值。

#include<stdio.h>

/*函数申明*/

int max(int num1,int num2);

int main()

{

    /*局部变量*/

    int a=100;

    int b=200;

    int ret;

    

    /*调用函数来获取最大值*/

     ret = max(a,b);

     printf("Max value is:%d\n",ret);

     return 0;

}

 

/*函数返回两个数中较大的那个数*/

int max(int num1,int num2)

{

    /*局部变量声明*/

    int result;

    if(num1 > num2)

        retult = num1;

    else

        retult = num2;

    return result;

}

max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果

Max value is200

4. 函数参数

    形参:在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据。
    实参:函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数。
    形参和实参的功能是作数据传送,发生函数调用时,实参的值会传送给形参。
  形参和实参的特点:
    1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
    2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
    3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。
    函数调用中发生的数据传送是单向的,只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

5. 函数返回值

  • 函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的值,可以通过 return 语句返回 。
  • 函数中可以有多个 return 语句,但每次调用只能有一个 return 语句被执行,所以只有一个返回值。
  • 一旦遇到 return 语句,不管后面有没有代码,函数立即运行结束,将值返回。 

int func()

{

   int a=100,b=200,c;

   return a+b;

   return a*b;

   return b/a;

}

返回值始终a+b的值,也就是300;

  • 没有返回值的函数为空类型,用 void 进行说明
例如:

void func()

{

   printf(Hello world!\n);

}

  • 一旦函数的返回值类型被定义为 void,就不能再接收它的值了。
例如,下面的语句是错误的:

int a=func();

  • 为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为 void 类型 。

6.  变量的作用域规则

任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。
C 语言中有三个地方可以声明变量:

(1) 在函数或块内部的局部变量

(2) 在所有函数外部的全局变量

(3) 在形式参数的函数参数定义中

让我们来看看什么是局部变量、全局变量和形式参数。

    3.6.1 局部变量

        在某个函数或块的内部声明的变量称为局部变量。 它们只能被该函数或该代码块内部的语句使用; 局部变

量在函数外部是不可知的。

    3.6.2 全局变量
       全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意
的函数内部能访问全局变量。

       全局变量可以被任何函数访问。也就是说,全局变量在声明后整个程序中都是可用的。

      在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值 。
    3.6.3  函数形参
     函数的参数,形式参数,被当作该函数内的局部变量,它们会优先覆盖全局变量。 

7.  总结

  • 从整体上看, C 语言代码是由一个一个的函数构成的,除了定义和说明类的语句(例如变量定义、宏定义、类型定义等)可以放在函数外面,所有具有运算或逻辑处理能力的语句(例如加减乘除、 if elsefor、函数调用等)都要放在函数内部。
  • 在所有的函数中, main() 是入口函数,有且只能有一个, C 语言程序就是从这里开始运行的。 
  • C 语言不但提供了丰富的库函数,还允许用户定义自己的函数。每个函数都是一个可以重复使用的模块,
    通过模块间的相互调用,有条不紊地实现复杂的功能。可以说
    C 程序的全部工作都是由各式各样的函数完成
    的,所以也把
    C 语言称为函数式语言 。
  • 语言中所有的函数定义,包括主函数 main() 在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数,被调用者称为被调函数。函数还可以自己调用自己,称为递归调用。 
  • main() 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此, C 程序的执行总是从 main() 函数开始,完成对其它函数的调用后再返回到 main() 函数,最后由 main() 函数结束整个程序。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值