实参和形参
主调与被调函数间有数据传递关系,这就是有参函数。
在定义函数时,函数名后面括号中的变量名称为“形式参数”,
在主调函数调用一个函数时,函数名后面括号中的参数(可以是表达式)称为“实际参数”。
注意:发生调用时,调用函数把实参的值复制一份,传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。
1. 形参调用时占据内存,调用结束后所占存储单元被释放
2. 实参可以是常量,变量,表达式,函数,但进行函数调用时必须具有确定的值.
3. 实参对形参的数据传送是单向的。
4 .实参和形参占用不同的内存单元,即使同名也互不影响
#include<stdio.h>
void fun(int x)// x是形参,在调用前不占内存
{
printf("hello x = %d\n",x);
}
int main()
{
int x = 20;
fun(x); //y是实参,内存中实际存在
}
/*函数的返回值通过return语句来获取,当不需要函数返回值时,可省去return语句
return语句的后面可以是变量,也可以是表达式:如 return(a > b)*/
#include<stdio.h>
int fun(int x,int y)//不需要返回值用void
{
return(x + y);
}
int main()
{
int sum = fun(10,20);//类型必须一样,int类型的函数需定义一个int类型的变量来接受
printf("sum = %d\n",sum);
return 0;
}
函数声明和定义
函数声明的作用是把函数名,函数参数的个数和参数类型等信息告诉编译器,以便在调用时,编译系统能正确识别并检查调用是否合法
格式 : 函数类型 函数名 (参数类型1,参数类型2,···参数类型n);
当一个函数在定义之前被调用,编译系统会在函数调用处停止并报错,函数声明可以使编译器“忽略”这个错误,继续下面的代码
#include<stdio.h>
double fun(double x,double y);//声明有fun这个函数
int main()
{
double sum = fun(1.2,1.3);//调用这个函数
//不管里面有没有参数都要用(),如fun();
printf("sum = %.2f\n",sum);
printf("%d",fun(1.2,1.3)); //两种输出语句一样
return 0;
}
double fun(double x,double y)
{
return (x + y);
}//定义这个函数
2018.7.24
函数的嵌套
函数不允许嵌套定义,但允许嵌套调用 。*/
#include<stdio.h>
int unfun(int y)
{
printf("i am unfun y = %d\n", y+1);
return 0;
}
int fun(int x)
{
unfun(x);//调用unfun
printf("i am fun x = %d\n",x);
return 0;
}
int main()
{
fun(20);//调用fun
return 0;
}
函数递归
//计算5的阶乘
#include<stdio.h>
int fac(int n)
{
int t;
if(1==n||0==n)
return 1;
else
{
t = n*fac(n-1);
return t;//返回所需要的值。
}
}
int main()
{
int f = fac(5);//太大的值会超过int保存范围
printf("jc= %d \n",f);
return 0;
}
2018.7.25