6.1.2 函数参数和返回值

在函数中,其参数和返回值是两个非常重要的数据。用户可以通过参数向函数内部传递数据,并且可以通过函数返回值获取函数中的返回数据。

1.函数参数

在C语言中,根据函数参数的使用位置不同,其种类有实参和形参两种。实参是在用户调用函数时,传递给函数的实际参数。而形参则是在函数定义时,所设置的形式参数,该类型的参数并不具有实际意义,只是一个标识。例如,用户使用函数形参实现自定义函数的定义。具体代码如下:

void add(int a,int b);//自定义函数

在自定义函数add()中,其参数a和参数b就是用户所设置的形式参数,表示函数的参数个数和数据类型。当然,用户也可以在函数定义时,只使用数据类型作为函数形参。其代码如下:

void add(int,int);//使用数据类型作为函数形参

注意 为了使函数内部能够更好地使用到形参,最好还是显式地设置形式参数,而不能仅仅使用数据类型作为函数的形参。

在程序中,调用自定义函数add()时,应当首先声明该函数。具体代码如下:

void add(int a,int b);//声明自定义函数

注意 在函数的声明中,用户为该函数设置两个整数类型的参数,分别为a和b。并且自定义函数声明的位置必须在调用之前。一般情况下,其声明位置都应该在代码开始处。

当函数声明成功之后,用户就可以实现该函数的具体功能。具体代码如下:

void add(int a,int b) //实现自定义函数add的具体功能
{
    int c=0; //定义并初始化变量c,用于保存和
    printf("该函数将实现两个数据相加!\n"); //输出提示语
    c=a+b; //实现数据相加
    printf("两个数据相加之后的和等于:\n"); //输出提示语
    printf("%d\n",c); //输出和
}

在实例代码中,定义并初始化整型变量c,用于保存两个数据相加后的和。代码段“c=a+b;”表示输入到该函数的参数相加,并将和保存到变量c中,且通过printf()函数输出到屏幕上。通过上面的两个步骤,用户就可以在主函数中对该自定义函数直接调用。其调用方法如下:

void add(int a,int b); //声明自定义函数的具体位置
#include<stdio.h> //包含标准输入/输出头文件
main() //主函数
{
    int a=0;
    int b=0; //定义并初始化整型变量
    printf("请用户输入数据a:\n"); //输出提示语
    scanf("%d",&a); //获取用户输入的数据,并赋给变量a
    printf("请用户输入数据b:\n"); //输出提示语
    scanf("%d",&b); //获取输入的数据,并赋给变量b
    add(a,b); //调用自定义函数add
return 0; //程序正常结束
}

注意 在实例代码中,自定义函数的声明位置应该位于主函数之外,并且是在函数调用之前。

在实例代码中,用户使用函数scanf()获取用户输入的数据,并将该数据保存到相应的变量中。通过代码“add(a,b);”实现调用自定义函数的功能。在调用的同时,程序将数据a和b作为自定义函数的参数输入到函数体中参与运算。

图6.1 程序运行结果

注意 在函数调用时,输入的参数a和b就是前面所介绍的实参。

将上面的程序整理一下,输入到编译器中进行编译、运行。其运行后的结果如图6.1所示。程序运行后将提示用户分别输入两个数据,并且将这两个数据相加后的和进行输出。通过实例程序的编写,用户应该明白了一个自定义函数的声明和使用方法,即先声明,再实现,最后调用。当然,用户也可以将自定义函数的实现放置在调用之前。这样,用户就不用声明函数,而直接对函数进行调用即可。

注意 如果函数实现在前,则可以直接调用。否则,先声明函数,再实现函数功能,最后才能调用函数。

2.函数返回值

对于一个自定义函数而言,除了参数外,还有一个重要的部分,即函数的返回值。函数的返回值可以将函数内部的运算结果等变量值传递到函数外部。在编程时,可以通过函数的返回值大大减少函数内部的功能代码量。例如,用户可以将前一小节中自定义的函数add()进行一些修改。首先,应当修改其声明的原型。具体代码如下:

int add(int a,int b);//修改自定义函数的声明

通过修改,用户已经将自定义函数的返回值类型修改为整数类型,即表示该函数将返回一个整数数据。通过自定义函数声明的修改以后,用户就可以在主函数中对其进行调用了。具体代码如下:

int add(int a,int b); //声明自定义函数
#include<stdio.h> //包含标准输入/输出头文件
main() //主函数
{
    int a=0; //定义并初始化整型变量
    int b=0;
    int c=0; //定义并初始化变量c,用于保存和
    printf("请用户输入数据a:\n"); //输出提示语
    scanf("%d",&a); //获取用户输入的数据,并赋给变量a
    printf("请用户输入数据b:\n"); //输出提示语
    scanf("%d",&b); //获取输入的数据,并赋给变量b
    printf("使用返回值实现数据相加!\n"); //输出提示语
    c=add(a,b); //调用自定义函数add
    printf("两个数据相加之后的和等于:\n"); //输出提示语
    printf("%d\n",c);
return 0; //程序正常结束
}
int add(int a,int b) //实现自定义函数add的具体功能
{
    int c1=0; //定义并初始化整型变量c1
    c1=a+b; //实现数据相加
    return c1; //返回计算结果
        }

图6.2 程序运行结果

在自定义函数add()的内部,用户使用代码段“c1=a+b;”实现两个数据的相加,并将其运算后的和赋予变量c1。由于该自定义函数具有整数类型的返回值,所以用户可以使用关键字return将运算结果作为函数返回值传递到函数外部。这样,用户可以在主函数中,直接调用自定义函数,并向其传入相应的参数。经过函数内部的计算功能和返回功能,会将运行后的结果通过返回值传递到外部。此时,用户应当使用一个整型变量c保存函数返回的值,并将其进行输出显示。其运行结果如图6.2所示。

该实例程序主要是利用了自定义函数的返回值,实现计算结果的传递。在实际编程中,用户可以利用函数的返回值将内部的重要数据或信息传递到外部。换句话而言,函数返回值就是函数内部与外部通信的一个桥梁,而函数参数是函数外部与内部通信的桥梁。