c语言函数

2008-02-23 05:28:45来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在学习C语言函数以前,我们需要了解什么是模块化程式设计方法。
人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程式员在设计一个复杂的应用程式时,往往也是把整个程式划分为若干功能较为单一的程式模块,然后分别予以实现,最后再把任何的程式模块像搭积木相同装配起来,这种在程式设计中分而治之的策略,被称为模块化程式设计方法。
在C语言中,函数是程式的基本组成单位,因此能够很方便地用函数作为程式模块来实现C语言程式。
利用函数,不但能够实现程式的模块化,程式设计得简单和直观,提高了程式的易读性和可维护性,而且还能够把程式中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样能够大大地减轻程式员的代码工作量。
函数是C语言的基本构件,是任何程式活动的舞台。函数的一般形式是:
type-specifier function_name(parameter list)
parameter declarations
{
body of the function
}
类型说明符定义了函数中return语句返回值的类型,该返回值能够是任何有效类型。假如没有类型说明符出现,函数返回一个整型值。参数表是个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数能够没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。
当一个函数没有明确说明类型时, C语言的编译程式自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其他类型数据时,需要分两步处理:
首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对他的首次调用之前。只有这样,C编译程式才能为返回非整型的值的函数生成正确代码。
4.1.1 函数的类型说明
可将函数说明为返回任何一种合法的C语言数据类型。
类型说明符告诉编译程式他返回什么类型的数据。这个信息对于程式能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。
返回非整型数据的函数被使用之前,必须把他的类型向程式的其余部分说明。若不这样做,C语言的编译程式就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程式就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程式这个函数返回什么值。下例示出了这种方法。
C语言函数说明和返回值
第一个函数的类型说明sum()函数返回浮点类型的数据。这个说明使编译程式能够对sum( ) 的调用产生正确代码。
函数类型说明语句的一般形式是:
type_specifier function_name (; )
即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能和调用者所需要的不一致,其结果是难以预料的。假如两者同处于一个文档中,编译程式能够发现该错误并停止编译。假如不在同一个文档中,编译程式无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上述错误。
当被说明为整型的函数返回字符时,这个字符值被转换为整数。因为C语言以不加说明的方式进行字符型和整型之间的数据转换,因而多数情况下,返回字符值的函数并不是说明为返回字符值,而是由函数的这种字符型向整型的缺省类型转换隐含实现的。
4.1.2 返回语句
返回语句r e t u r n有两个重要用途。第一,他使得内含他的那个函数立即退出,也就是使程式返回到调用语句处继续进行。第二,他能够用来回送一个数值。本章将说明这两个用途。
1. 从函数返回
函数能够用两种方法停止运行并返回到调用程式。第一种是在执行完函数的最后一个语句之后,从概念上讲,是碰到了函数的结束符“ }”(当然这个花括号实际上并不会出现在目标码中,但我们能够这样理解)。例如,下面的函数在屏幕上显示一个字符串。
C语言函数说明和返回值
一旦字串显示完毕,函数就没事可做了,这时他返回到被调用处。
在实际情况中,没有多少函数是以这种缺省方式终止运行的。因为有时必须送回一个值,大多数函数用return语句终止运行,有时在函数中设立了多个终止点以简化函数、提高效率。切记,一个函数能够有多个返回语句。如下所示,函数在s 1、s 2相等时返回1,不相等时返回- 1。
C语言函数说明和返回值
2. 返回值
任何的函数,除了空值类型外,都返回一个数值(切记,空值是ANSI建议标准所做的扩展,也许并不适合读者手头的C编译程式)。该数值由返回语句确定。无返回语句时,返回值是0。这就意味着,只要函数没有被说明为空值,他就能够用在任何有效的C语言表达式中作
为操作数。这样下面的表达式都是合法的C语言表达式。
x = power (y);
if (max (x,y) >100) printf("greater;")
for (ch=getchar( ); isdigit (ch);) . . . ;
可是,函数不能作为赋值对象,下列语句是错误的:
s w a p ( x ,y) =100;
C编译程式将认为这个语句是错误的,而且对含有这种错误语句的程式不予编译。
任何非空值的函数都会返回一个值。我们编写的程式中大部分函数属于三种类型。第一种类型是简单计算型—函数设计成对变量进行运算,并且返回计算值。计算型函数实际上是个“纯”函数,例如sqr( )和sin( )。第二类函数处理信息,并且返回一个值,仅以此表示
处理的成功或失败。例如write( ),用于向磁盘文档写信息。假如写操作成功了, write( )返回写入的字节数,当函数返回- 1时,标志写操作失败。最后一类函数没有明确的返回值。实际上这类函数是严格的过程型函数,不产生值。假如读者用的是符合A N S I建议标准的C编译程式,那么任何这一类函数应当被说明为空值类型。奇怪的是,那些并不产生令人感兴趣的结果的函数却无论如何也要返回某些东西。例如printf( )返回被写字符的个数。然而,很难找出一个真正检查这个返回值的程式。因此,虽然除了空值函数以外的任何函数都返回一个值,我们却不必非得去使用这个返回值。有关函数返回值的一个常见问题是:既然这个值是被返回的,我是不是必须把他赋给某个变量?回答是:不必。假如没有用他赋值,那他就被丢弃了。请看下面的程式,他使用了mul( )函数。mul( )函数定义为:int mul(int x, int y){......}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C语言中 在变量前后的执行详解

下一篇: C/C 中的结构体