首页 > 编程笔记

C语言函数返回值及其类型

通常希望通过函数调用,不仅完成一定的操作,还要返回一个确定的值,这个值就是函数的返回值。我们知道函数有两种,一种是带返回值的,另一种是不带返回值的。那么函数的返回值是如何得到的,又有什么要求?通过阅读本文您将得到答案。

C语言函数的返回值

C语言函数的返回值是通过函数中的 return 语句实现的。return 语句将被调用函数中的一个确定值返回给主调函数,如下面的示例。

示例1

编写 cube() 函数用于计算 x3。代码如下:
#include<stdio.h>
long cube(long x)  /*定义函数cube(),返回类型为long*/
{
   long z;
   z=x*x*x;
   return z;     /*通过return返回所求结果,结果类型也应为long*/
}
int main()
{
   long a,b;
   printf("请输入一个整数:");
   scanf("%ld",&a);
   b=cube(a);
   printf("%ld的立方为:%ld",a,b);
}
运行结果:

请输入一个整数:34
34的立方为:39304

本例首先执行主函数 main(),当主函数执行到 c=cube(a);时调用 cube() 子函数,把实际参数的值传递给被调用函数中的形参 x。

在 cube() 函数的函数体中,定义变量 z 得到 x 的立方值,然后通过 return 将 z 的值(z 即函数的返回值)返回到调用它的主调函数中,将结果赋给 b,最后在主函数中输出 b。

return 语句后面的值也可以是表达式,如【示例1】中的 cube() 函数可以改写为:

long cube(long x)
{
   return x*x*x; 
}

该示例中只有一条 return 语句,后面的表达式已经实现了求 x³ 的功能,先求解后面表达式 x*x*x 的值,然后返回。

return 语句有两种格式:

也就是说,return 后面的表达式可以加括号,也可以不加括号。return 语句的执行过程是首先计算表达式的值,然后将计算结果返回给主调函数。示例中的 return 语句还可以写成:

return (z);

C语言函数返回值的类型

在定义函数时,必须指明函数的返回值类型,而且 return 语句中表达式的类型应该与函数定义时首部的函数类型是一致的,如果二者不一致,则以函数定义时函数首部的函数类型为准。

示例2

改写【示例1】,代码如下:
#include<stdio.h>
int cube(float x)   /*定义cube()函数,返回类型为int*/
{
   float z;        /*定义返回值为z,类型为float*/
   z=x*x*x;
   return z;  /*通过return返回所求结果*/
}
int main()
{
   float a;
   int b;
   printf("请输入一个数:");
   scanf("%f",&a);
   b=cube(a);
   printf("%f的立方为:%d\n",a,b);
}
运行结果:

请输入一个数:4.5
4.500000的立方为:91

cube() 函数定义为整型,而 return 语句中的 z 为浮点型,二者不一致。

按上述规定,用户输入的数为 4.5,则先将 z 的值转换为整型 91(即去掉小数部分),然后 cube(x)带回一个整型值 91 回到主调函数 main()。如果将 main() 函数中的 b 定义成浮点型,用%f格式控制符输出,则输出 91.000000。

注意:初学者应该做到函数类型与 return 语句返回值的类型一致。

如果一个函数不需要返回值,则将该函数指定为 void 类型,此时函数体内不必使用 return 语句。在调用该函数时,执行到函数末尾就会自动返回主调函数。

示例3

编写 printdiamond() 函数,用于输出如下图形。

***********
 ***********
  ***********


具体代码如下:
#include<stdio.h>
void  printdiamond () /*定义一个无返回值的函数,返回类型应为void*/
{
   printf("***********\n");
   printf(" ***********\n");
   printf("  ***********\n");
}
int main()
{
   printdiamond();       /*调用printdiamond()函数*/
}
运行结果

***********
 ***********
  ***********


printdiamond() 函数完成的只是输出一个图形,因此不需要返回任何的结果,所以不需要写 return 语句。此时函数的类型使用关键字 void,如果省略不写,系统将认为返回值类型是 int 型。

技巧:无返回值的函数通常用于完成某项特定的处理任务,如【示例3】中的打印图形,或输入、输出、排序等。

一个函数中可以有一个以上的 return 语句,但只能有一个 return 语句被执行到,不论执行到哪个 return 语句,都将结束函数的调用返回主调函数,即带返回值的函数只能返回一个值。

示例4

改写【示例1】,代码如下:
#include<stdio.h>
int max(int a,int b)    /*定义函数max()*/
{
   if(a>b)          /*如果a>b,返回a*/
      return a;
   return b;        /*否则返回b*/
}
int main()
{
   int x,y;
   printf("请输入两个整数:");
   scanf("%d%d",&x,&y);
   printf("%d和%d的最大值为:%d\n",x,y,max(x,y));
}
运行结果:

请输入两个整数:19 5
19和5的最大值为:19

示例中使用了两个 return 语句,同样可以求出最大值。在调用 max() 函数时,把主调函数中的实参分别传递给形参 a 和 b 后,就执行这个子函数。

在子函数中执行 “if(a>b)return a; ” ,当条件满足时则返回 a 的值,条件不满足就执行下面的语句 “return b;”,就是返回 b。这里尽管有两个 return 语句,但不管执行到哪个 return 语句,都将返回一个值。

注意:如果要将多个值返回主调函数中,使用 return 语句是无法实现的。

优秀文章