C语言参数传递

来源:互联网 发布:康德判断力批判 知乎 编辑:程序博客网 时间:2024/05/01 07:53

函数在调用时把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的是实际参数。在函数调用之前,实际参数的值将被复制到这些形参中。

C语言在参数调用时,实参和形参之间的数据都是单向的“值传递”方式。C语言要求函数的实参有确定的值,在函数调用时给形参分配相应的内存单元,同时实参的“值”赋(复制)给形参,实现数据从实参到形参的传递。因为是复制,所以在操作形参过程中不会影响到实参内容。

1、简单变量或数组元素作为函数参数

数组元素本身属于简单变量,在向形参传递数据时,只需要将变量的“值”复制一份放到形参变量中去操作,此时在被调用函数中操作的对象(形参)与实参并不在同一内存单元,并且在调用结束后形参所占内存单元被释放,因此调用函数不会影响到实参变量的值,同时被调函数也不会影响到主调函数中的其他变量的值。

2、指针变量或数组名作为函数参数

指针变量作为参数在调用时仍然会将其值赋给形参,相当于复制。此时数据在实参与形参间的传递仍然是单向的,调用函数不会影响实参的值,即指针变量中所在地址。而与简单变量不同的是,指针变量复制给形参的值本身是一个地址。

  3、数组名作函数参数

数组名本身就是一个特殊的指针变量,其值是数组的首地址,因此作为实参时其传给形参的是内存中某指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对实参数组与形参数组来说数据传递变现为“双向”的,而对实参变量与形参变量而言数据的传递仍然是单向的。

4、结构体数组作函数参数

1)结构体数组元素作为实参

   将结构体变量所占的内存单元的内容全部顺序复制给形参。当实参的成员中包含数组时,形参对应的成员接收到的是一个地址。

2)结构体数组名作为实参

传递的是内存中已指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对数组的操作的变现是双向的。

0 0
原创粉丝点击