📄 王大刚--c语言编程宝典--函数.htm
字号:
<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>这时一次只传递了数组的一个元素。 <BR>
<P> 二、被调用函数向调用函数返回值 <BR>
<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> } <BR>
<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> char
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -