c语言中函数的嵌套调用(关于函数声明的一个例子)

###########################例子全部来源于谭浩强版c语言################################

include <stdio.h>

int main()

{

int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf("please input the four integer numbers");

scanf("%d %d %d %d",&a,&b,&c,&d);

max=max4(a,b,c,d);

printf("the max is %d",max);

return 0;

}

int max4(int a,int b,int c,int d)

{

int max2(int a,int b);   // 声明也可以写成 int max2(int ,int); 

int m;

m=max2(a,b);

m=max2(c,m);

m=max2(d,m);

return m;

}

int max2(int a,int b)   

{

   return (a>b?a:b)    

}

也可以写成:

int max2(int a,int b)

{

 if(a>b)

  return a;

else 

 return b;

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

写本例子的是因为对函数的声明不够清楚明白, 本例子涉及到了函数的嵌套,可以发现例子中总共有2个函数不算主函数的话/max4/max2;

本例子中用的函数声明是将声明放在了调用的函数体里,涉及到谁调用,就将谁的声明放进来,可以看到max4中有max2的声明,而主函数里面有max4的声明

另一种方法是将max4/max2全部放在函数体之外,谁用到谁就可以调用!

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

max4的函数也可以改写:

int max4(int a,int b,int c,int d)

{

 int max2(int a,int b);

return max2(max2(max2(a,b),c),d); //语句简洁

}

涉及到函数调用的几种方式:

1 函数调用语句 strcpy(str1,str2);

2 函数表达式    c=max2(a,b);

3 函数参数  就是上述例子涉及到的方法;

函数参数传递的方法:按值传递

大一的时候不懂 行参实参,只会教人的时候装b吹一会

现在再看有新的理解,行参在你定义这个函数体的时候不会分配内存,在调用函数之前行参不会占用任何的内存空间,当调用的时候,实参从内存空间将值复制到刚开辟的调用函数时刚为行参开辟的内存空间,就是说行参和实参本不属于同一内存空间,所以二者只有在调用函数时才会存在某种关联,实际并不存在任何其他关系。需注意的地方

猜你喜欢

转载自blog.csdn.net/moxiaoxuan123/article/details/52514152