</p> 4.1.2 返回语句3 m* H+ q0 ?% P
返回语句r e t u r n有两个主要用途。第一,它使得内含它的阿谁函数当即退出,也就是使轨范返回到挪用语句处继续进行。第二,它可以用往返送一个数值。本章将声名这两个用途。' t: V1 G4 L( ~' V- V
1. 从函数返回 7 U" }& I# A5 O/ f( p' m- K
0 H1 C% n% }& V& y7 s) a0 l
函数可以用两种体例遏制运行并返回到挪用轨范。第一种是在执行完函数的最后一个语句之后,概略念上讲,是碰着了函数的竣事符“ }”(当然这个花括号现实上并不会呈此刻方针滤鱿脯但我们可以这样理解)。例如,下面的函数在屏幕上显示一个字符串。 , F. P* l1 A3 X3 W8 ?
" @4 ]9 ^# S) ]: q+ ~; l
一旦字串显示完毕,函数就没事可做了,这时它返回到被挪用处。" V. l! D; k( f/ T4 h G8 z% f
在现实情形中,没有若干好多函数是以这种缺省体例终止运行的。因为有时必需送回一个值,大大都函数用return语句终止运行,有时在函数中设立了多个终止点以简化函数、提高效率。切记,一个函数可以有多个返回语句。如下所示,函数在s 1、s 2相等时返回1,不相等时返回- 1。, _( h7 c ^* j8 M( R7 v; B
wid
1 p1 T3 W& k' m4 O' @* ]* i! Y' D8 c& I
2. 返回值$ Y! |, U o. N) ?. W8 f
所有的函数,除了空值类型外,都返回一个数值(切记,空值是ANSI建议尺度所做的扩展,也许并不适合读者手头的C编译轨范)。该数值由返回语句确定。无返回语句时,返回值是0。这就意味着,只要函数没有被声名为空值,它就可以用在任何有用的C说话表达式中作# A% j- x1 w- I0 Z+ V, |
为操作数。这样下面的表达式都是正当的C说话表达式。
9 Y/ @% @* x2 Q x = power (y);8 C; x9 s2 ^! h9 i( m
if (max (x,y) >100) printf("greater;")
9 w, w M+ S ]+ E for (ch=getchar( ); isdigit (ch);) . . . ;
9 N5 d* l3 \' ?" T4 C 可是,函数不能作为赋值对象,下列语句是错误的:
) c3 K3 A3 i4 v s w a p ( x ,y) =100;
3 b: G( A, q& u H9 j C编译轨范将认为这个语句是错误的,而且对含有这种错误语句的轨范不予编译。
9 \% R7 m* L0 W: e8 b, v% m 所有非空值的函数城市返回一个值。我们编写的轨范中大部门函数属于三种类型。第一种类型是简单忌本—函数设计核对变量进走运算,而且返回计较值。忌本函数现实上是一个“纯”函数,例如sqr( )和sin( )。第二类函数措置信息,而且返回一个值,仅以此暗示
: U7 P. J5 {! H! n$ } 措置的成功或失踪败。例如write( ),用于向磁盘文件写信息。如不美观写操作成功了, write( )返回写入的字节数,当函数返回- 1时,标识表记标帜写操作失踪败。最后一类函数没有明晰的返回值。现实上这类函数是严酷的过程型函数,不发生值。如不美观读者用的是合适A N S I建议尺度的C编译轨范,那么所有这一类函数理当被声名为空值类型。奇异的是,那些并不发生令人感乐趣的结不美观的函数却无论若何也要返回某些工具。例如printf( )返回被写字符的个数。然而,很难找出一个真正搜检这个返回值的轨范。是以,虽然除了空值函数以外的所有函数都返回一个值,我们却不必非得去使用这个返回值。有关函数返回值的一个常见问题是:既然这个值是被返回的,我是不是必需把它赋给某个变量?回覆是:不必。如不美观没有用它赋值,那它就被丢弃了。请看下面的轨范,它使用了mul( )函数。mul( )函数界说为:int mul(int x, int y){......}
) E1 G" B$ \& ~6 A' W5 z2 i& ?2 {; d
3 O( S( j" v0 q6 c- o 在第一行, mul( )的返回值被赋予z,在第二行中,返回值现实膳缦慊有赋给任何变量,但被printf( )函数所使用。最后,在第三行,返回值被丢弃不用,因为既没有把它赋给第一个变量,也没有把它用作表达式中的一部门。 |