C语言程序设计(第4章函数)

文章作者 100test 发表时间 2007:03:10 17:20:19
来源 100Test.Com百考试题网


4.1 函数说明与返回值
当一个函数没有明确说明类型时, C语言的编译程序自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理:
首先,必须给函数以明确的类型说明符;
其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。

4.1.1 函数的类型说明
可将函数说明为返回任何一种合法的C语言数据类型。
类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。
返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句。
[例4 - 1 ]
float sum( ). / *函数说明* /
main( )
{
float first,s e c o n d .
first =123.23.
second = 99.09.
printf ("%f",sum (first,s e c o n d ) ).
}

float sum (a,b ) / * 函数定义* /
float a,b.
{
return a b.
}

第一个函数的类型说明sum( )函数返回浮点类型的数据。这个说明使编译程序能够对sum( )的调用产生正确代码。
函数类型说明语句的一般形式是:
type_specifier function_name ( ) ;
即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能与调用者所要求的不一致,其结果是难以预料的。如果两者同处于一个文件中,编译程序可以发现该错误并停止编译。如果不在同一个文件中,编译程序无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上述错误。当被说明为整型的函数返回字符时,这个字符值被转换为整数。因为C语言以不加说明的方式进行字符型与整型之间的数据转换,因而多数情况下,返回字符值的函数并不是说明为返回字符值,而是由函数的这种字符型向整型的缺省类型转换隐含实现的。

4.1.2 返回语句
返回语句return有两个重要用途。第一,它使得内含它的那个函数立即退出,也就是使程序返回到调用语句处继续进行。第二,它可以用来回送一个数值。本章将说明这两个用途。
1. 从函数返回
函数可以用两种方法停止运行并返回到调用程序。第一种是在执行完函数的最后一个语句之后,从概念上讲,是遇到了函数的结束符“ }”(当然这个花括号实际上并不会出现在目标码中,但我们可以这样理解)。例如,下面的函数在屏幕上显示一个字符串。

[例4 - 2 ]
pr_reverse ()
{
char s[80]; / *定义一个字符数组* /
scanf("%s",s). / *输入一个字符串,其长度不超过7 9个字符* /
printf("%s\n",s).
}
一旦字串显示完毕,函数就没事可做了,这时它返回到被调用处。
在实际情况中,没有多少函数是以这种缺省方式终止运行的。因为有时必须送回一个值,大多数函数用return语句终止运行,有时在函数中设立了多个终止点以简化函数、提高效率。切记,一个函数可以有多个返回语句。如下所示,函数在s1、s2相等时返回1,不相等时返回- 1。

[例4 - 3 ]
find_char(s1,s2)
char s1,s2.
{
if(s1 == s2)
return 1.
else
return -1.
}
2. 返回值
所有的函数,除了空值类型外,都返回一个数值(切记,空值是A N S I建议标准所做的扩展,也许并不适合读者手头的C编译程序)。该数值由返回语句确定。无返回语句时,返回值是0。这就意味着,只要函数没有被说明为空值,它就可以用在任何有效的C语言表达式中作为操作数。这样下面的表达式都是合法的C语言表达式。
x = power(y).
if(max (x,y) >100) printf("greater").

相关文章


辽宁:2005年上半年计算机等级考试12月9日起报名
上海:2005年上半年英语、计算机等级考开始报名
C语言程序设计(第4章函数)
2006全国计算机等级二级南开百题部分试题3
C语言程序设计(第3章程序控制语句)4
上海:2005年全国计算机等级考试12月8日起报名
2006全国计算机等级二级南开百题部分试题4
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛