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

printf("In main before calling "/输出此2数及其乘积/
"i=%-4d j=%-4d ij=%-4d ", i, j, ij);
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(); /键盘输入字符/

str=match(c, s); /调用子函数/
putchar(' ');
puts(str); /输出子函数返回的指针所指的字符串/
getch();
return 0;
}
char *match(char c, char *s)
{
int i=0;
while(c!=s[i]&&s[i]!=' ')/找字符串中指定的字符/
i++;
return(&s[i]); /返回所找字符的地址/
}

三、用全程变量实现参数互传
以上两种办法可以在调用函数和被调用函数间传递参数, 但使用不太方便。如
果将所要传递的参数定义为全程变量, 可使变量在整个程序中对所有函数都可见。
这样相当于在调用函数和被调用函数之间实现了参数的传递和返回。这也是实际中
经常使用的方法, 但定义全程变量势必长久地占用了内存。因此, 全程变量的数目
受到限制, 特别对于较大的数组更是如此。当然对于绝大多数程序内存都是够用的。
例6:
#incluide
void disp(void);
int m[10]; /定义全程变量/
int main()
{
int i;
printf("In main before calling ");
for(i=0; i<10; i++){
m[i]=i;
printf("=", m[i]); /输出调用子函数前数组的值/
}
disp(); /调用子函数/
printf(" In main after calling ");
for(i=0; i<10; i++)

printf("=", m[i]); /输出调用子函数后数组的值/
getch();
return 0;
}
void disp(void)
{
int j;
printf("In subfunc after calling ");/子函数中输出数组的值/
for (j=0; i<10; j++){
m[j]=m[j]*10;
printf("=", m[i]);
}
}

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