三、用全程变量实现参数互传
以上两种办法可以在调用函数和被调用函数间传递参数, 但使用不太方便。如
果将所要传递的参数定义为全程变量, 可使变量在整个程序中对所有函数都可见。
这样相当于在调用函数和被调用函数之间实现了参数的传递和返回。这也是实际中
经常使用的方法, 但定义全程变量势必长久地占用了内存。因此, 全程变量的数目
受到限制, 特别对于较大的数组更是如此。当然对于绝大多数程序内存都是够用的。
例6:
#incluide
void disp(void);
int m[10]; /*定义全程变量*/
int main()
{
int i;
printf("In main before calling\n");
for(i=0; i<10; i++){
m[i]=i;
printf("%3d", m[i]); /*输出调用子函数前数组的值*/
}
disp(); /*调用子函数*/
printf("\nIn main after calling\n");
for(i=0; i<10; i++)
printf("%3d", m[i]); /*输出调用子函数后数组的值*/
getch();
return 0;
}
void disp(void)
{
int j;
printf("In subfunc after calling\n");/*子函数中输出数组的值*/
for (j=0; i<10; j++){
m[j]=m[j]*10;
printf("%3d", m[i]);
}
}
2.3 函数的递归调用
Turbo C2.0允许函数自己调用自己, 即函数的递归调用, 递归调用可以使程序
简洁、代码紧凑, 但要牺牲内存空间作处理时的堆栈。
如要求一个n!(n的阶乘)的值可用下面递归调用:
例8:
#include
unsigned ling mul(int n);
int main()
{
int m;
puts("Calculate n! n=?\n");
scanf("%d", &m); /*键盘输入数据*/
printf("%d!=%ld\n", m, mul(m));/*调用子程序计算并输出*/
getch();
retun 0;
}
unsigned long mul(int n)
{
unsigned long p;
if(n>1)
p=n*mul(n-1); /*递归调用计算n!*/
else
p=1L;
return(p); /*返回结果*/
}
运行结果:
calculate n! n=?
输入5时结果为:
5!=120