函数的四种形式:1.返回类型 函数名(类型名 形参1,类型名 形参2......); //函数的声明
2.返回类型 函数名(类型名 形参1,类型名 形参2......)(无分号!)
{
函数体
} //函数的定义
3.变量=函数名(实参1,实参2......); //函数的调用
4.函数名; //函数的地址形参
函数调用:函数调用时将实参的值赋给形参,形参的改变不会影响实参,换句话说,一旦将实参的值赋给形参后,两者不再联系。若是想改变实参,则应该将形参定义为地址,将实参的地址赋给形参。返回值:返回值不是直接将形参的值返回给实参,因为一旦函数运行完毕给它所分配的栈中的数据都会被释放,所以形参的值是先赋给一个临时量(临时空间),而后再将临时量的值返回给实参,并且实参具有常性(只可读不可写) 例如 :MAX_(x,y)=100; 是错误的 因为返回值(将亡值)是常性的,即右值。
函数调
用的过程如下图所示:
形参:只有在调用函数时才会为其分配空间,赋值,而且一旦函数调用完毕,分配的空间会被立即释放,所以它的作用域仅在该函数内。
实参:调用函数时给出的参数包含实实在在的数据,所以称为实际参数。实参可以是常数,表达式,函数,变量等,在进行函数时它们必须有确定的值。
定义实参,形参时:参数应该为自变量,即:有自变量作用的变量。
定义形参时,编写代码时用调用scanf的冲动的值定为形参,同理有想调用printf的冲动的变量作为返回值。
数组元素可以作为函数的实参,不能作为函数的形参。
因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体在内存中占连续的一段存储单元)。
一维数组名做函数参数:
(1)用数组名做函数参数时,应在主调函数与被调函数分别定义数组。
(2)实参数组与形参数组类型必须一致。
(3)形参数组可以不指定大小,在定义数组时在数组名后加空的方括号。
例如:float average(float array[])
因为指定形参大小是不起作用的,因为C语言编译系统不会检查形参的数组的大小,只是将实参数组的首元素的地址传给形参数组名,形参数组名获得了实参数组的首元素地址,因为数组名代表数组的地址,因此可以认为形参数组与实参数组具有同一地址,它们占同一存储单元,所以被调函数中对形参数组的操作会改变实参数组的值。