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