指引网

当前位置: 主页 > 编程开发 > C >

C语言 函数参数说明 与 返回值

来源:网络 作者:佚名 点击: 时间:2017-07-19 23:09
[摘要]  在C语言中,函数的参数分为形参和实参。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在函数调用中。

C 语言是结构化语言,它的主要结构成分是函数。函数被作为一种构件,用以完成程序中的某个具体功能。函数允许一个程序的各个任务被分别定义和编码,使程序模块化。本章介绍 C 语言函数的设计,如何用函数分解程序的各个功能,如何使用函数构成模块化程序,以及代码复用的基本思想。

函数说明 与 返回值

函数的一般形式如下:

    类型说明符  函数名(参数表)
    参数说明段
    {
        函数体
    }

 

1 函数的类型说明

函数的类型说明符可以是任何数据类型,包括空值型 void,即不使用 return 语句返回任何数据。默认情况下,函数被自动说明为整型。函数必须在第一调用前定义,这样编译器才能找到该函数。前置函数类型说明被称为 函数原型。

#include <stdio.h>
#include <stdlib.h>

#define PI 3.141593
float cylinder_area(float, float);        // 函数的类型说明,函数原型

int main()
{
    float r, h, s;        // r圆半径,h高,s面积
    puts("请输入圆柱的半径和高:");
    if (scanf("%f,%f", &r, &h) == 2)
    {
        s = cylinder_area(r, h); // 调用函数 cylinder_area(),返回值到变量s
        printf("\n该圆柱体的表面积为:%f\n", s);
    }
    else
    {
        puts("您输入的数据格式不合法!");
    }

    return EXIT_SUCCESS;
}

float cylinder_area(float r, float h)
{
    float cd_area;
    cd_area = 2 * (PI * r * r) + (2 * PI * r * h);

    return  cd_area;
}

设计函数时需要注意数据类型的匹配关系,函数的类型说明符必须与 return 语句返回的数据类型相同,函数的参数说明必须与参数的数据类型相同,否则会造成编译错误。

2 返回语句

函数的返回语句 return 有 2 个作用:其一,结束当前函数,调用者获得程序控制权;其二,将计算结果传递给调用者。

函数的结束有 2 种情况,一是函数体内所有的代码执行完毕,二是 return 语句被执行。



C语言函数的参数和返回值

函数的参数

函数的参数分为形参和实参。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在函数调用中。

形参和实参的功能是作数据传送,发生函数调用时,实参的值会传送给形参。

形参和实参有以下几个特点:
1) 形参变量只有在函数被调用时才分配内存单元,在调用结束时,立刻释放所分配的内存单元。因此,形参只有在函数内部有效,不能在函数外部使用。

2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。

函数调用中发生的数据传送是单向的,只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

【示例】计算 1+2+3+...+(n-1)+n 的值。

    #include <stdio.h>
    int sum(int n){
        int i;
        for(i=n-1; i>=1; i--){
            n+=i;
        }
        printf("The inner n = %d\n",n);
        return n;
    }
    int main(){
        int n, total;
        printf("Input a number: ");
        scanf("%d",&n);
        total = sum(n);
        printf("The outer n = %d \n", n);
        printf("1+2+3+...+(n-1)+n = %d\n", total);
        return 0;
    }

运行结果:
Input a number: 100?
The inner n = 5050
The outer n = 100
1+2+3+. ..+(n-l)+n = 5050

通过 scanf 输入 n 的值,作为实参,在调用 sum 时传送给形参量 n。

    注意:本例中形参变量和实参变量的名称都是 n,但这是两个不同的量,各自的作用域不同,下节将会讲解。

在mian函数中用printf 语句输出一次n值,这个n值是实参n的值。在函数sum中也用printf 语句输出了一次n值,这个n值是形参最后取得的n值。

从运行情况看,输入n值为100,即实参n的值为100,把此值传给函数sum时,形参n的初值也为100,在执行函数过程中,形参n的值变为5050。函数运行结束后,输出实参n的值仍为100。可见实参的值不随形参的变化而变化。


函数的返回值

函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的值,可以通过return语句返回。

return语句的一般形式为:

return 表达式;

或者:

return (表达式);

例如:

return max;
return a+b;
return (100+200);

函数中可以有多个 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();


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

------分隔线----------------------------