Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90994578
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-05-24 23:42:50



二、的值

  的值是指被调用之后, 执行体中的程序段所取得的并返回给主调的值。如调用正弦取得正弦值,调用例5.1的max取得的最大数等。对的值(或称返回值)有以下一些说明:

1. 的值只能通过return语句返回主调。return 语句的一般形式为:
return 表达式;
或者为:
return (表达式);
该语句的功能是计算表达式的值,并返回给主调。 在中允许有多个return语句,但每次调用只能有一个return 语句被执行, 因此只能返回一个值。

2. 值的类型和定义中的类型应保持一致。 如果两者不一致,则以类型为准,自动进行类型转换。

3. 如值为整型,在定义时可以省去类型说明。

4. 不返回值的,可以明确定义为“空类型”, 类型说明符为“void”。如例5.3中s并不向主返值,因此可定义为:
void s(int n)
{ ……
}

  一旦被定义为空类型后, 就不能在主调中使用被调的值了。例如,在定义s为空类型后,在主中写下述语句 sum=s(n); 就是错误的。为了使程序有良好的可读性并减少出错, 凡不要求返回值的都应定义为空类型。说明在主调中调用某之前应对该被调进行说明, 这与使用变量之前要先进行变量说明是一样的。 在主调中对被调作说明的目的是使编译系统知道被调返回值的类型, 以便在主调中按此种类型对返回值作相应的处理。 对被调的说明也有两种格式,一种为传统格式,其一般格式为: 类型说明符 被调名(); 这种格式只给出返回值的类型,被调名及一个空括号。

  这种格式由于在括号中没有任何参数信息, 因此不便于编译系统进行错误检查,易于发生错误。另一种为现代格式,其一般形式为:
类型说明符 被调名(类型 形参,类型 形参…);
或为:
类型说明符 被调名(类型,类型…);
  现代格式的括号内给出了形参的类型和形参名, 或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。例5.1 main中对max的说明若
用传统格式可写为:
int max();
用现代格式可写为:
int max(int a,int b);
或写为:
int max(int,int);
  C语言中又规定在以下几种情况时可以省去主调中对被调的说明。
1. 如果被调的返回值是整型或字符型时, 可以不对被调作说明,而直接调用。这时系统把自动对被调返回值按整型处理。例5.3的主中未对s作说明而直接调用即属此种情形。

2. 当被调的定义出现在主调之前时, 在主调中也可以不对被调再作说明而直接调用。例如例5.1中, max的定义放在main 之前,因此可在main中省去对 max的说明int max(int a,int b)。

3. 如在所有定义之前, 在外预先说明了各个的类型,则在以后的各主调中,可不再对被调作说明。例如:
char str(int a);
float f(float b);
main()
{
……
}
char str(int a)
{
……
}
float f(float b)
{
……
}
其中第一,二行对str和f预先作了说明。 因此在以后各中无须对str和f再作说明就可直接调用。

4. 对库的调用不需要再作说明, 但必须把该的头文件用include命令包含在源文件前部。数组作为参数数组可以作为的参数使用,进行数据传送。 数组用作参数有两种形式,一种是把数组元素(下标变量)作为实参使用; 另一种是把数组名作为的形参和实参使用。一、数组元素作实参数组元素就是下标变量,它与普通变量并无区别。 因此它作为实参使用与普通变量是完全相同的,在发生调用时, 把作为实参的数组元素的值传送给形参,实现单向的值传送。例5.4说明了这种情况。[例5.4]判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。编程如下:
void nzp(int v)
{
if(v>0)
printf("%d ",v);
else
printf("%d ",0);
}
main()
{
int a[5],i;
printf("input 5 numbers\n");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
nzp(a[i]);
}
}void nzp(int v)
{ ……
}
main()
{
int a[5],i;
printf("input 5 numbers\n");
for(i=0;i<5;i++)
{ scanf("%d",&a[i]);
nzp(a[i]);
}
}

  本程序中首先定义一个无返回值nzp,并说明其形参v 为整型变量。在体中根据v值输出相应的结果。在main中用一个for 语句输入数组各元素, 每输入一个就以该元素作实参调用一次nzp,即把a[i]的值传送给形参v,供nzp使用。

阅读(386) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~