📄 51.htm
字号:
当数组作为形式参数向被调用函数传递时,
只传递数组的地址, 而不是将整个 <br>
数组元素都复制到函数中去,
即用数组名作为实参调用子函数,
调用时指向该数组 <br>
第一个元素的指针就被传递给子函数。因为在Turbo
C2.0中, 没有下标的数组名就 <br>
是一个指向该数组第一个元素的指针。当然数组变量的类型在两个函数中必须相同。
<br>
用下述方法传递数组形参。 <br>
例2: <br>
#include<stdio.h> <br>
void disp(int *n); <br>
int main() <br>
{ <br>
int m[10], i; <br>
for(i=0; i<10; i++) <br>
m[i]=i; <br>
disp(m); /*按指针方式传递数组*/
<br>
getch(); <br>
return 0; <br>
} <br>
void disp(int *n) <br>
{ <br>
int j; <br>
for(j=0; j<10; j++) <br>
printf("%3d", *(n++)); <br>
printf("\n"); <br>
} <br>
另外,
当传递数组的某个元素时,
数组元素作为实参, 此时按使用其它简单变 <br>
量的方法使用数组元素。例2按传递数组元素的方法传递时变为:
<br>
#include<stdio.h> <br>
void disp(int n); <br>
int main() <br>
{ <br>
int m[10], i; <br>
for(i=0; i<10; i++){ <br>
m[i]=i; <br>
disp(m[i]); /*逐个传递数组元素*/ <br>
} <br>
getch(); <br>
return 0; <br>
} <br>
void disp(int n) <br>
{ <br>
printf("%3d\t"); <br>
} <br>
这时一次只传递了数组的一个元素。 </p>
<p>
二、被调用函数向调用函数返回值 </p>
<p> 一般使用return语句由被调用函数向调用函数返回值,
该语句有下列用途: <br>
1.
它能立即从所在的函数中退出,
返回到调用它的程序中去。 <br>
2.
返回一个值给调用它的函数。 <br>
有两种方法可以终止子函数运行并返回到调用它的函数中:
一是执行到函数的 <br>
最后一条语句后返回; 一是执行到语句return时返回。前者当子函数执行完后仅返
<br>
回给调用函数一个0。若要返回一个值,
就必须用return语句。只需在return 语句 <br>
中指定返回的值即可。例1返回最大值时变为:
<br>
例3: <br>
#include<stdio.h> <br>
int maxmum(int x, int y, int z);
/*说明一个用户自定义函数*/ <br>
int main() <br>
{ <br>
int i, j, k, max; <br>
printf("i, j, k=?\n"); <br>
scanf("%4d%4d%4d", &i, &j, &k); <br>
max=maxmum(i, j, k); /*调用子函数,
并将返回值赋给max*/ <br>
printf("The maxmum value is %d\n", max); <br>
getch(); <br>
return 0; <br>
} <br>
<br>
maxmum(int x, int y, int z) <br>
{ <br>
int max; <br>
max=x>y?x:y;
/*求最大值*/ <br>
max=max>z?max:z; <br>
return(max); /*返回最大值*/
<br>
} <br>
return语句可以向调用函数返回值,
但这种方法只能返回一个参数, 在许多情 <br>
况下要返回多个参数, 这是用return语句就不能满足要求。Turob
C2.0提供了另一 <br>
种参数传递的方法,
就是调用函数向被调用函数传递的形式参数不是传递变量本身,
<br>
而是传递变量的地址,
当子函数中向相应的地址写入不同的数值之后,
也就改变了 <br>
调用函数中相应变量的值,
从而达到了返回多个变量的目的。 <br>
例4: <br>
#include<stdio.h> <br>
void subfun(int *m, int *n);
/*说明子函数*/ <br>
int main() <br>
{ <br>
int i, j; <br>
printf("i, j=?\n"); <br>
scanf("%d, %d", &i, &j); /*从键盘输入2个整数*/
<br>
printf("In main before calling\n"/*输出此2数及其乘积*/
<br>
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j); <br>
subfun(&i, &j);
/*以传送地址的方式调用子函数*/ <br>
printf("In main after calling\n"/*调用子函数后输出变量值*/
<br>
"i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j); <br>
getch(); <br>
return 0; <br>
} <br>
void subfun(int *m, int *n) <br>
{ <br>
*m=*m+2; <br>
*j=*i-*j; <br>
printf("In subfun after calling\n" /*子函数中输出变量值*/
<br>
"i=%-4d j=%-4d i*j=%-4d\n", *i, *j, *i**j); <br>
} </p>
<p> 上例中, *i**j表示指针i和j所指的两个整型数*i和*j之乘积。
<br>
另外, return语句也可以返回一个指针,
举例如下。 <br>
下例中先等待输入一字符串,
再等待输入要查找的字符, 然后调用match()
函 <br>
数在字符串中查找该字符。若有相同字符,
则返回一个指向该字符串中这一位置的 <br>
指针, 如果没有找到, 则返回一个空(NULL)指针。
<br>
例5: <br>
#include<stdio.h> <br>
char *match(char c, char *s); <br>
int main() <br>
{ <br>
char s[40], c, *str; <br>
str=malloc(40);
/*为字符串指什分配内存空间*/ <br>
printf("Please input character string:"); <br>
gets(s);
/*键盘输入字符串*/ <br>
printf("Please input one character:"); <br>
c=getche();
/*键盘输入字符*/ <br>
str=match(c, s);
/*调用子函数*/ <br>
putchar('\n'); <br>
puts(str);
/*输出子函数返回的指针所指的字符串*/ <br>
getch(); <br>
return 0; <br>
} <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -