按值传递和按地址传递。
(1)按值传递
函数调用时,调用函数把实参的值传递给被调用函数的形参,形参值的变化不会影响实参的值。这是一种单向的数据传送方式。
当实参是常量、变量、表达式或数组元素,形参是变量名时,函数传递数据采用的是按值传递。
(2)按地址传递
当函数的形参为数组(见7.6.2【】)或指针(见8.3)类型时,函数调用的参数传递称为按地址传递。
由于传递的是地址,使形参与实参共享同一存储单元,这样通过形参可以直接引用或处理该地址中的数据,达到改变实参值的目的。
注意:
① 实参的个数应与形参一致,否则将会出现编译错误。
② 定义函数时,系统并不给形参分配存储单元,只有函数被调用时系统才给形参分配存储单元。在调用结束后,形参所占用的存储单元被释放。
③ 实参与形参即使同名,也会分配不同的分配存储单元。
④ C语言规定,函数间的参数传递是“值传递”,即单向传递,实参可以把值传给形参,但形参的值不能传给实参,也就是说对形参的修改不会影响对应的实参。这是由于在内存中,实参与形参是不同的存储单元,函数执行结束后,形参的存储单元被释放。
( 可以参考主页调用swap调换两个值的栗子 )
函数声明:
1.同变量一样,函数的调用也遵循“先声明,后使用”的原则。
函数声明的格式为:
类型名 函数名(参数类型1,参数类型2,…);
类型名 函数名(参数类型1 形参1,参数类型2 形参 2,…);
2. 当满足下面两个情况之一时,在主调函数中可以不对被调函数进行声明。
① 被调函数定义在主调函数之前时,对被调用函数的声明可以省去。
② 被调函数的返回值类型是整型或字符型时,对被调用函数的声明可以省去。