C教程-函数(2)_计算机等级指导/介绍

2.2 函数参数传递
一、调用函数向被调用函数以形式参数传递
用户编写的函数一般在对其说明和定义时就规定了形式参数类型, 因此调用这
些函数时参量必须与子函数中形式参数的数据类型、顺序和数量完全相同, 否则在
调用中将会出错, 得到意想不到的结果。
注意:
当数组作为形式参数向被调用函数传递时, 只传递数组的地址, 而不是将整个
数组元素都复制到函数中去, 即用数组名作为实参调用子函数, 调用时指向该数组
第一个元素的指针就被传递给子函数。因为在Turbo C2.0中, 没有下标的数组名就
是一个指向该数组第一个元素的指针。当然数组变量的类型在两个函数中必须相同。
用下述方法传递数组形参。
例2:
#include
void disp(int *n);
int main()
{
int m[10], i;
for(i=0; i<10; i++)
m[i]=i;
disp(m); /按指针方式传递数组/
getch();
return 0;
}
void disp(int *n)
{
int j;
for(j=0; j<10; j++)
printf("%3d", *(n++));
printf(" ");
}
另外, 当传递数组的某个元素时, 数组元素作为实参, 此时按使用其它简单变
量的方法使用数组元素。例2按传递数组元素的方法传递时变为:
#include
void disp(int n);
int main()
{
int m[10], i;
for(i=0; i<10; i++){
m[i]=i;
disp(m[i]); /逐个传递数组元素/
}
getch();
return 0;
}
void disp(int n)
{
printf("%3d "); }
这时一次只传递了数组的一个元素。

二、被调用函数向调用函数返回值

一般使用return语句由被调用函数向调用函数返回值, 该语句有下列用途:
1. 它能立即从所在的函数中退出, 返回到调用它的程序中去。
2. 返回一个值给调用它的函数。
有两种方法可以终止子函数运行并返回到调用它的函数中: 一是执行到函数的
最后一条语句后返回; 一是执行到语句return时返回。前者当子函数执行完后仅返
回给调用函数一个0。若要返回一个值, 就必须用return语句。只需在return 语句
中指定返回的值即可。例1返回最大值时变为:
例3:
#include
int maxmum(int x, int y, int z); /说明一个用户自定义函数/
int main()
{
int i, j, k, max;
printf("i, j, k=? ");
scanf("%4d%4d%4d", &i, &j, &k);
max=maxmum(i, j, k); /调用子函数, 并将返回值赋给max/
printf("The maxmum value is %d ", max);
getch();
return 0;
}

maxmum(int x, int y, int z)
{
int max;
max=x>y?x:y; /求最大值/
max=max>z?max:z;
return(max); /返回最大值/
}
return语句可以向调用函数返回值, 但这种方法只能返回一个参数, 在许多情
况下要返回多个参数, 这是用return语句就不能满足要求。Turob C2.0提供了另一
种参数传递的方法, 就是调用函数向被调用函数传递的形式参数不是传递变量本身,
而是传递变量的地址, 当子函数中向相应的地址写入不同的数值之后, 也就改变了
调用函数中相应变量的值, 从而达到了返回多个变量的目的。
例4:
#include
void subfun(int m, int n); /说明子函数/
int main()
{
int i, j;
printf("i, j=? ");
scanf("%d, %d", &i, &j); /从键盘输入2个整数/ printf("In main before calling "/输出此2数及其乘积/
"i=%-4d j=%-4d i
j=%-4d ", i, j, i
j);
subfun(&i, &j); /以传送地址的方式调用子函数/
printf("In main after calling "/调用子函数后输出变量值/
"i=%-4d j=%-4d ij=%-4d ", i, j, ij);
getch();
return 0;
}
void subfun(int *m, int *n)
{
*m=*m+2;
*j=*i-j;
printf("In subfun after calling " /子函数中输出变量值/
"i=%-4d j=%-4d i
j=%-4d ", *i, *j, *i**j);
}

上例中, i**j表示指针i和j所指的两个整型数i和*j之乘积。
另外, return语句也可以返回一个指针, 举例如下。
下例中先等待输入一字符串, 再等待输入要查找的字符, 然后调用match() 函
数在字符串中查找该字符。若有相同字符, 则返回一个指向该字符串中这一位置的
指针, 如果没有找到, 则返回一个空(NULL)指针。
例5:
#include
char *match(char c, char *s);
int main()
{
char s[40], c, *str;
str=malloc(40); /为字符串指什分配内存空间/
printf("Please input character string:");
gets(s); /键盘输入字符串/
printf("Please input one character:");
c=getche(); /键盘输入字符/

Published At
Categories with 认证考试
Tagged with
comments powered by Disqus