预防程序与TurboC常见错误解析(3)
添加时间: 2007-5-7 3:57:25 作者: 计算机等级考试认证参考 阅读次数:39 来源: http://www.d9soft.com
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]);
}
}
2.3 函数的递归调用
Turbo C2.0允许函数自己调用自己, 即函数的递归调用, 递归调用可以使程序简洁、代码紧凑, 但要牺牲内存空间作处理时的堆栈。
如要求一个n!(n的阶乘)的值可用下面递归调用:
例8:
#include
unsigned ling mul(int n);
int main()
{
int m;
puts("Calculate n! n=? ");
scanf("%d", &m); /*键盘输入数据*/
printf("%d!=%ld ", 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
3. 函数作用范围
Turbo C2.0中每个函数都是独立的代码块, 函数代码归该函数所有, 除了对函数的调用以外, 其它任何函数中的任何语句都不能访问它。例如使用跳转语句goto就不能从一个函数跳进其它函数内部。除非使用全程变量, 否则一个函数内部定义的程序代码和数据, 不会与另一个函数内的程序代码和数据相互影响。
Turbo C2.0中所有函数的作用域都处于同一嵌套程度, 即不能在一个函数内再说明或定义另一个函数。
Turbo C2.0中一个函数对其它子函数的调用是全程的, 即是函数在不同的文件中, 也不必附加任何说明语句而被另一函数调用, 也就是说一个函数对于整个程序都是可见的。
4. 函数的变量作用域
在Turbo C2.0中, 变是可以在各个层次的子程序中加以说明, 也就是说, 在任何函数中, 变量说明有只允许在一个函数体的开头处说明, 而且允许变量的说明(包括初始化)跟在一个复合语句的左花括号的后面, 直到配对的右花括号为止。它的作用域仅在这对花括号内, 当程序执行到出花括号时, 它将不复存在。当然, 内层中的变量即使与外层中的变量名字相同, 它们之间也是没有关系的。
例9.
#include
int i=10;
int main()
{
int i=1;
printf("%d , i);
{
int i=2;
pritnf("%d ", i);
{
extern i;
i+=1;
printf("%d ", i);
}
printf("%d ", ++i);
}
printf("%d ", ++i);
return 0;
}
运行结果为
1 2 11 3 2
上一篇文章: 预防程序与TurboC常见错误解析(5) 下一篇文章: C语言程序设计初步(8)
相关文章:

