一.自定义函数
自定义函数与库函数类似,同样由返回类型,函数名,形式参数,函数体构成。
具体格式如下图所示:
ret_type fun_name(形参)
{
函数体
}
ret_type为函数返回类型,如int(返回整型如return 0)、float(返回浮点类型)、char(返回字符型)等。*注意:void没有函数返回值,当void函数结束时自动返回给调用者。
fun_name为函数名,函数名可自行规定,如下图所示:
#include<stdio.h>
int Add(int i,int j)//自定义加法函数add
{
int z=0;
z=i+j;
return z;
}
int main()
{
int i=0;
int j=0;
int r=0;
scanf("%d %d",&i,&j);//从键盘读入i,j两个数的值
r = Add (i, j);//调用我们定义的函数
printf("r=%d\n",r);
return 0;
}
函数具有两个部分:声明部分、执行部分。
声明部分需在执行部分之前。
*二.return语句
1.return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执⾏表达式,再返回表达式的结果。
2.return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。
3.return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。
*4.return语句执⾏后,函数就彻底返回,后边的代码不再执⾏。
5.如果函数中存在if等分⽀的语句,必须要保证每种情况下都有return返回,否则会出现编译错误。
三.形参与实参
定义:实参是指实际传递给函数的参数 // 形参是指只是形式上存在,而没有真实占用内存的参数。
例如图中,i,j两个变量在最开始出现在定义函数后时为形参,因为函数仅仅定义而并没有使用(没有向内存申请空间也不是真实存在)。(*形参只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形参的实例化。)
当在主函数后add函数被调用时,参数i,j被传递给函数,这时,参数i,j为实参。
形参是实参的临时拷贝
#include<stdio.h>
int Add(int i,int j)//自定义加法函数add
{
int z=0;
z=i+j;
return z;
}
int main()
{
int i=0;
int j=0;
int r=0;
scanf("%d %d",&i,&j);//从键盘读入i,j两个数的值
r = Add (i, j);//调用我们定义的函数
printf("r=%d\n",r);
return 0;
}
注意:
1.形参出现在函数定义中,在整个函数体内都可以使用,形参变量只有在被调用时才分配内存,在调用结束时即刻释放所分配的内存单元,因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。 离开该函数则不能使用,实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
2.形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
3.实参可以是常量、变量、表达式、函数等,在进行函数调用时(无论实参是什么类型),都必须具有确定的值, 以便把这些值传送给形参。所以我们需要用赋值,输入等办法使实参获得确定值。
4.实参和形参在数量上,类型上,顺序上必须严格一致, 否则会发生“类型不匹配”的错误。
今日的分享到此结束,明天见啦!