C语言参数传递
2016-10-01 23:33
225 查看
函数在调用时把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的是实际参数。在函数调用之前,实际参数的值将被复制到这些形参中。
C语言在参数调用时,实参和形参之间的数据都是单向的“值传递”方式。C语言要求函数的实参有确定的值,在函数调用时给形参分配相应的内存单元,同时实参的“值”赋(复制)给形参,实现数据从实参到形参的传递。因为是复制,所以在操作形参过程中不会影响到实参内容。
1、简单变量或数组元素作为函数参数
数组元素本身属于简单变量,在向形参传递数据时,只需要将变量的“值”复制一份放到形参变量中去操作,此时在被调用函数中操作的对象(形参)与实参并不在同一内存单元,并且在调用结束后形参所占内存单元被释放,因此调用函数不会影响到实参变量的值,同时被调函数也不会影响到主调函数中的其他变量的值。
2、指针变量或数组名作为函数参数
指针变量作为参数在调用时仍然会将其值赋给形参,相当于复制。此时数据在实参与形参间的传递仍然是单向的,调用函数不会影响实参的值,即指针变量中所在地址。而与简单变量不同的是,指针变量复制给形参的值本身是一个地址。
3、数组名作函数参数
数组名本身就是一个特殊的指针变量,其值是数组的首地址,因此作为实参时其传给形参的是内存中某指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对实参数组与形参数组来说数据传递变现为“双向”的,而对实参变量与形参变量而言数据的传递仍然是单向的。
4、结构体数组作函数参数
1)结构体数组元素作为实参
将结构体变量所占的内存单元的内容全部顺序复制给形参。当实参的成员中包含数组时,形参对应的成员接收到的是一个地址。
2)结构体数组名作为实参
传递的是内存中已指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对数组的操作的变现是双向的。
C语言在参数调用时,实参和形参之间的数据都是单向的“值传递”方式。C语言要求函数的实参有确定的值,在函数调用时给形参分配相应的内存单元,同时实参的“值”赋(复制)给形参,实现数据从实参到形参的传递。因为是复制,所以在操作形参过程中不会影响到实参内容。
1、简单变量或数组元素作为函数参数
数组元素本身属于简单变量,在向形参传递数据时,只需要将变量的“值”复制一份放到形参变量中去操作,此时在被调用函数中操作的对象(形参)与实参并不在同一内存单元,并且在调用结束后形参所占内存单元被释放,因此调用函数不会影响到实参变量的值,同时被调函数也不会影响到主调函数中的其他变量的值。
2、指针变量或数组名作为函数参数
指针变量作为参数在调用时仍然会将其值赋给形参,相当于复制。此时数据在实参与形参间的传递仍然是单向的,调用函数不会影响实参的值,即指针变量中所在地址。而与简单变量不同的是,指针变量复制给形参的值本身是一个地址。
3、数组名作函数参数
数组名本身就是一个特殊的指针变量,其值是数组的首地址,因此作为实参时其传给形参的是内存中某指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对实参数组与形参数组来说数据传递变现为“双向”的,而对实参变量与形参变量而言数据的传递仍然是单向的。
4、结构体数组作函数参数
1)结构体数组元素作为实参
将结构体变量所占的内存单元的内容全部顺序复制给形参。当实参的成员中包含数组时,形参对应的成员接收到的是一个地址。
2)结构体数组名作为实参
传递的是内存中已指定单元的地址,调用过程中形参数组与实参数组占用同一段内存单元,因此对形参数组的操作也就是对实参数组的操作,对数组的操作的变现是双向的。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- 快速解决C# android base-64 字符数组的无效长度问题
- C# 拷贝数组的几种方法(总结)
- C#动态调整数组大小的方法
- Lua和C语言的交互详解
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- jQuery 判断是否包含在数组中Array[]的方法
- 浅谈C#各种数组直接的数据复制/转换
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法