📄 王大刚--c语言编程宝典--函数.htm
字号:
*match(char c, char *s) <BR> {
<BR> int i=0;
<BR>
while(c!=s[i]&&s[i]!='\n')/*找字符串中指定的字符*/
<BR>
i++; <BR>
return(&s[i]);
/*返回所找字符的地址*/ <BR> } <BR> <BR>
<P> 三、用全程变量实现参数互传 <BR>
以上两种办法可以在调用函数和被调用函数间传递参数, 但使用不太方便。如 <BR>果将所要传递的参数定义为全程变量,
可使变量在整个程序中对所有函数都可见。 <BR>这样相当于在调用函数和被调用函数之间实现了参数的传递和返回。这也是实际中 <BR>经常使用的方法,
但定义全程变量势必长久地占用了内存。因此, 全程变量的数目 <BR>受到限制, 特别对于较大的数组更是如此。当然对于绝大多数程序内存都是够用的。
<BR> 例6: <BR>
#incluide<stdio.h> <BR> void disp(void);
<BR> int
m[10]; /*定义全程变量*/
<BR> int main() <BR> {
<BR> int i;
<BR> printf("In main
before calling\n");
<BR> for(i=0;
i<10; i++){
<BR>
m[i]=i;
<BR>
printf("%3d", m[i]); /*输出调用子函数前数组的值*/
<BR> }
<BR>
disp();
/*调用子函数*/ <BR>
printf("\nIn main after calling\n");
<BR> for(i=0;
i<10; i++)
<BR>
printf("%3d", m[i]); /*输出调用子函数后数组的值*/
<BR> getch();
<BR> return 0;
<BR> } <BR> void
disp(void) <BR> {
<BR> int j;
<BR> printf("In
subfunc after calling\n");/*子函数中输出数组的值*/
<BR> for (j=0;
i<10; j++){
<BR>
m[j]=m[j]*10;
<BR>
printf("%3d", m[i]);
<BR> }
<BR> } <BR> <BR>
<P> 2.3 函数的递归调用 <BR> Turbo
C2.0允许函数自己调用自己, 即函数的递归调用, 递归调用可以使程序 <BR>简洁、代码紧凑, 但要牺牲内存空间作处理时的堆栈。
<BR> 如要求一个n!(n的阶乘)的值可用下面递归调用: <BR> 例8:
<BR> #include<stdio.h>
<BR> unsigned ling mul(int n);
<BR> int main() <BR>
{ <BR> int m;
<BR> puts("Calculate
n! n=?\n"); <BR>
scanf("%d", &m);
/*键盘输入数据*/ <BR>
printf("%d!=%ld\n", m, mul(m));/*调用子程序计算并输出*/
<BR> getch();
<BR> retun 0;
<BR> } <BR> unsigned
long mul(int n) <BR> {
<BR> unsigned long
p; <BR> if(n>1)
<BR>
p=n*mul(n-1); /*递归调用计算n!*/
<BR> else
<BR>
p=1L; <BR>
return(p);
/*返回结果*/ <BR> } <BR>运行结果:
<BR> calculate
n! n=? <BR>输入5时结果为:
<BR> 5!=120 <BR>
<P> 3. 函数作用范围 <BR> <BR> Turbo
C2.0中每个函数都是独立的代码块, 函数代码归该函数所有, 除了对函 <BR>数的调用以外,
其它任何函数中的任何语句都不能访问它。例如使用跳转语句goto <BR>就不能从一个函数跳进其它函数内部。除非使用全程变量, 否则一个函数内部定义
<BR>的程序代码和数据, 不会与另一个函数内的程序代码和数据相互影响。 <BR> Turbo
C2.0中所有函数的作用域都处于同一嵌套程度, 即不能在一个函数内再 <BR>说明或定义另一个函数。 <BR>
Turbo C2.0中一个函数对其它子函数的调用是全程的, 即是函数在不同的文件 <BR>中, 也不必附加任何说明语句而被另一函数调用,
也就是说一个函数对于整个程序 <BR>都是可见的。 <BR>
<P> 4. 函数的变量作用域 <BR> 在Turbo C2.0中,
变是可以在各个层次的子程序中加以说明, 也就是说, 在任 <BR>何函数中, 变量说明有只允许在一个函数体的开头处说明, 而且允许变量的说明(
<BR>包括初始化)跟在一个复合语句的左花括号的后面, 直到配对的右花括号为止。它 <BR>的作用域仅在这对花括号内, 当程序执行到出花括号时,
它将不复存在。当然, 内 <BR>层中的变量即使与外层中的变量名字相同, 它们之间也是没有关系的。 <BR>
例9. <BR> #include<stdio.h>
<BR> int i=10; <BR> int
main() <BR> {
<BR> int i=1;
<BR> printf("%d\t,
i); <BR> {
<BR>
int i=2;
<BR>
pritnf("%d\t", i);
<BR>
{
<BR>
extern i;
<BR>
i+=1;
<BR>
printf("%d\t", i);
<BR>
}
<BR>
printf("%d\t", ++i);
<BR> }
<BR> printf("%d\n",
++i); <BR> return 0;
<BR> } <BR> 运行结果为
<BR> 1 2
11 3 2 <BR> 从程序运行的结果不难看出程序中各变量之间的关系,
以及各个变量的作用域。 <BR> <BR>
<HR width="94%" color=#ee9b73 SIZE=1>
</TD>
<TD class=tt3 vAlign=bottom width="8%" bgColor=#e0e0e0><STRONG><A
href="http://www.hjflying.8u8.com/cl/019.htm">后一页</A><BR><A
href="http://www.hjflying.8u8.com/cl/017.htm">前一页</A><BR><A
href="http://www.hjflying.8u8.com/cl/index.html">回目录</A><BR><A
href="http://www.hjflying.8u8.com/index.htm">回首页</A><BR></STRONG></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -