函数
①形式参数:
在定义函数时函数名后面括号中的变量名称称为形式参数(简称形参),即形参出现在函数定义中。形参变量只有在被调用时才会为其分配内训单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效,只有当函数被调用时,系统才为形参分配存储单元,并完成实参与形参的数据传递。在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。
②实际参数:
主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数(简称实参),即实参出现在主调函数中。
实参可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传递给形参。因此应预先用赋值,输入等办法使实参获得确定值。
说明:在被定义的函数中,必须指定形参的类型。实参与形参的类型应相同或赋值兼容。实参和形参在数量上,类型上,顺序上应该严格一致,否则会发生类型不匹配的错误。
// 当实参传给形参的时候
// 形参相当与实参的一份临时拷贝
// 改变形参不会改变实参
1.传值调用是指直接将实参的值传给形参。而形参和实参分别占有不同内存块,对形参的修改不会影响实参。
2.传址调用是把实参的内存地址传递给形参的一种调用函数的方式。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接改变实参的值。
若传递的参数为数组,则形式参数只接收数组内第一个元素的地址;
int binary_search(int arr ,int k)//本质上arr是指针变量
函数声明:
声明中的x,y.可以省略。
一般地,我们将函数声明放在.h文件中,函数实践放在.c文件中,在另一.c文件中#include".h"(自己创造的.h文件),就可以使用自己创造的函数了。
函数调用时实参表达式按从右往左的顺序传给形参。
输出2,1,0
函数类型
double/int型函数--可以没有返回值。
case1:
#include
<stdio.h>
int
turn(
int
a
)
{
if
(
a
== 0)
{
return
9;
}
}
int
main()
{
int
a = 2;
a=turn(a);
printf(
"%d"
, a);
return
0;
}//输出1
由于有a接收turn(a)的返回值,此时如果turn没有返回值,则会强行返回1给a。
由此
,如果函数没有返回值,而又有变量来接接收的返回值,则函数强行会返回1。
case2:
#include
<stdio.h>
int
turn(
int
a
)
{
printf(
"%d"
,
a
);
}
int
main()
{
int
a = 6;
turn(a);
return
0;
}//输出6
如果
没有变量接收函数返回值,则int/double型的函数可以没有return或return 一个无关紧要的数,
void型函数--
在返回类型为 void 的函数中,return 返回语句不是必需的,隐式的 return 发生在函数的最后一个语句完成时。一般情况下,返回类型是 void 的函数使用 return 语句(return;)是为了引起函数的强制结束。
ps:void型函数不能用于初始化int型的实体。