没有合适的资源?快使用搜索试试~ 我知道了~
c语言基础教程函数和存储类.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 91 浏览量
2022-07-13
22:06:40
上传
评论
收藏 443KB PDF 举报
温馨提示
试读
32页
c语言基础教程函数和存储类.pdf
资源详情
资源评论
资源推荐
第五章
5.1.1 函数的定义
如果想调用一个函数完成某种功能,必须先按其功能来定义该函数。函数定义的格式如
下所示:
< 存储 类说明 ><数据类型说明 ><函数名 >(<参数表 >)
< 参数说明 >
{
< 函数体 >
}
函数的定义可分两大部分:函数头和函数体。函数头包含(函数名 >和(参数表)以及
关于该函数的(存储类说明)、《数据类型说明) , 还有 <参数说明) . 函数体是由一对花括
号括起来的若干语句组成的, 函数体内可以有一条语句或多条语句, 也可以有复合语句, 还
可以是空, 即该函数什么操作也不做, 这是一个最简单的函数。 (函数名) 的起法同标识符,
能够通过函数名来标明该函数的主要功能为最好。 (函数名 >后面跟一对圆括号, 内有一个 <
参数表、,该 ' 参数表)由一个或多个参数构成,多个参数之间用逗号分隔,也可以没有参
数,但圆括号不可省略。 定义瞬数时要对该函数的存储类和数据类型进行说明。 函数的存储
类有两种:外部函数和内部函数。外部函数用 extern 关键字加在函数名前面进行说明,常
常省略,凡是不加存储类说明的函数都是外部函数。内部函数必须在函数名前面加 stai}c
关健字进行说明, 内部函数又称静态函数。 函数的数据类型是该函数返回值的类型, 函数的
数据类型千一分丰富,一般 C语言 所允许的数据类型大多都可作为函数类型,个别的除外,
如联合类型等。 C语言规定,数据类型中除了
int 型的可以不要说明外,其余各种类型都需说明。如果一个函数具有参数时,则需对参数
的类型进行说明。 <参数说明)一般放在函数名的下一行,有的编译系统(如 Turbo G )可
以把参数说明放在参数表中。
下面是函数定义的几个例子:
Nothing ()
{ }
该函数名字是 nothing, 它没有参数,它的函数体是空,该函数什么也不做。空函数可
以用于调试中,它表明应该调用一个函数,但该函数尚未编好,先用一个空函数顶替。
void nopa ()
{
printf ("oK!" );
}
该函数名是 nops, 该函数没有参数, 因此不必进行参数说明, 这里, void 关键字用来说
明该函数没有返回值。该函数的函数体内仅有一个语句。
float max (x, y )
float x, y;
{
float z
z 一 x>y? x:y:
return (z);
该函数名是 max,它有两个参数 x,y, 它们都是 float 型数,由于该函数有参数,因此需
要
参数说明: float x, y; 该函数的数据类型为 float 型,这说明该函数有返回值,而返
回值的类型是 float 型。该函数。无 存储 类的说明,这意味着该函数的存储类为外部的。该
函数体是由 3 条语句组成的。这里有说明语句,它被放在执行语句的前面。
在函数的定义中还应注意如下几个问题:
(1)C语言 中的函数可分为有返回值和无返回值两大类。在有返回值的函数定义中,
除 int 型返回值外都必须对返回值的类型进行说明。 在无返回值的函数定义中, 可以加上无
返回值的说明符 void, 也可以不加。这样,对于一个不加数据类型说明的函数可能是无返回
值的,也可能是有 int 型返回值的。
(2)函数的定义不能嵌套。这就是说,不能在一个函数的函数体内再定义一个函数。
例如,下列写法是错误的:
fl (x,y )
int x, y;
(
f2 (a,b )
int a,b;
{
Return (a 十 b);
}
这种企图在 f1 () 函数中再定义一个 f2 () 函数的做法是错误的。但是,函数的调用允
许嵌套。这就是说, 可以在一个函数体内调用另一个函数,也可以进行自身调用(又称递归
调用) .
(3)如果一个函数的函数体中有变量的定义或说明时,一定要放在执行语句的前边,
不可放在中间或后面,否则要出编泽错。
5.1.2 函数的说明
函数定义好后,在调用之前一般地要进行说明。函数的说明方法有如下两种:
一是只说明函数的类型,这称为简单说明。例如,对前面定义过的函数 max说明如下:
float max () ;
这种说明可以单独一行,也可以与其他同类型的变量放在一起。
二是不仅说明函数的类型还要说明其参数的类型, 这称为原型说明。 例如, 对前面己定
义过的函数 max ( )原型说明如一 F:
Boat max (float,float );
原型说明要比简单说明复杂一些, 但是用原型说明后, 在函数调用时系统将其参数的类
型进行检查,如果发现不一致, 则报错。 如果用简单说明方法,则在调用时不作参数类型是
否一致的检查,即使不一致也不报错,由此可见,原型说明比简单说明要 安全 些。
在实际使用中关于函数的说明还需注意如下几点:
(1)在下列情况下,函数在调用之前不必说明:在定义函数时没有加任何说明;或者
是该函数无返回值义没有加 void 说明符;或者是该函数具有 int 型返回值而省略说明符。
(2) 助在下列情况下,函数在调用之前必须说明,如不说明,将出现编译错:即在定
义函数时加了说明符,包含 void 在内,又是先调用后定义 (即调用在定义之前) , 则调用之
前必须说明。
(3)在下列情况下, 即在定义函数时加了说明符, 包含 void 在内。 而先定义后调用 (即
定义在调用之前) , 则调用函数之前可以说明也可以不说明。
有时为了使得系统能够检查函数调用时其参数类型是否一致, 对于不必须说
明函数的情况也对函数进、
5.2.1 函数的参数
C语言 中,有的函数有参数,可以一个或多个,多个参数用逗号分隔,而有的函数没有参
数,但是函数名后面的圆括号不可省略,例如,前面讲过的主函数 main( )就是属于没有
参数的函数。但是,主函数也可以有参数,后面会讲到,
函数参数分为形式参数(简称形参)和实在参数(简称实参)两种。形参是指在定义函
数时, (参数表)中的参数,因为该参数在该函数被调用之前是没有确定值的,只是形式仁
的参数, 只有被调用时通过实参来获取值。 实参是指调用函数的参数, 因为该参数已具有确
定的值,是实在的参数:实参可以是表达式,在调用之前先计算出表达式的值。
在实际应用中关于形参和实参的使用还应注意如下几点:
(1)在定义函数时,所指定的形参在该函数被调用之前是不被分配内存单元的。只有
在发生函数调用时, 才给形参分配单元, 井且赋值,一旦函数调用结束后, 形参所占的内存
单元又被释放掉。因此,形参属于局部变量,其作用范围仅在定义它的 }J 数体内。
(2)函数调用时所用的实参是个具有确定值的表达式,调用时先计算表达式的值,再
将其值传递给对应的形参。
(3)函数的形参是属于定义它的函数的局部变量。因此,允许一个函数的形参和实参
同名,因为它们在内存中占有不同的 存储 单元。
(4)函数调用要求形参和实参在个数上相等,并且对应的参数类型相同。否则将会发
生" 个数不匹配 " 或 "类型不一致 " 的错误。 一般情况下, 即使不报错误信息, 也会造成结果不
正确。
下面举一个简单的函数调用的例子, 通过它进一步说明函数的定义格式, 函数的说明方
法和形参与实参的不同。
[ 例 5. 1] 求两个 float 型数的和。
程序内容如下:
main()
{
float a,b,sum;
float fadd();
a=5.6;
b=7,2;
sum=fadd(a,b);
printf ("%.2f\n ”,sum);
}
float fadd(x,y)
float x,y
{
retutrt(x+y);
执行该程序输出如下结果:
12. 80
说明:
(1)该程序中定义了两个函数: main ( )和 fadd ( ). 前一个是主函数,它无参
数,也无返回值。后一个是具有 float 型返回值的带有参数的函数,该函数有 2 个参数 x
和 Y, 它们都是 float 型变量。
(2)在主函数 main )中, float fadd ( ); 这是对函数 fadd ()的简单说明,只说
明函数的类型是 float 型(即返回值的类型) . 如果甩原型说明应采用如下格式:
float fadd ( #loat,float );
这种情况下,对 fadd < )函数必须说明,因为该函数返回值非 int 型的,并且又是调
用在先定义在后。如不说明、则会出现编译错,读者可以上机验证。
(3)该程序中, x 和 Y 是 fadd < )函数的两个形参,关于形参类型说明的方法,除了
本程序中说明方法外,还可以采用如下方法:
float fadd<fioat x,float y )
即在参数表中就说明了参数的类型。但是,这种说明方法并不是所有编译系统都允许。
而 Tuiba C 编译系统是允许的。
该程序中, a 和 b 是 fadd()函数的两个实参, 在调用该函数时, a 和 b 的值是确定的。
该程序中的函数调用时满足了形参与实参个数相等,对应类型相同的要求。
5.2.2 函数的返回值、
C语言 中,有的函数带有返回值,有的函数不带有返回值。
函数的返回值都是通过 return (表达式))语句来实现的。例如,在本章例 5. 1 中,
fadd()函数的函数体中的 return (x+y)十妇; 语句就是将表达式 x 十 Y 的值作为返回值,
返回给调用函数 fadd ( )的值赋给变量 sum o 返回值的类型是该函数的类型。带有返回
值的 return 语句具体实现过程如下:
(1)先计算 return 语句中《表达式)的值,
(2)根据函数的类型对哎表达式)的类型进行转换,使得(表达式》的类型转换成为
函数的类型;
( 3)将<表达式 >的值和类型返回给调用函数, 作为调用函数的值和类型。一般情况下,
要设置一个变量来接收这一返回值。
(4)将程序流的控制权交给调用函数,继续执行调用函数下边的语句。
在不带返回值的, turn 语句中。不执行上述( 1)至( 3)步较,只执行( 4)步魏。
剩余31页未读,继续阅读
yyc13139216118
- 粉丝: 2
- 资源: 6万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0