函数传递参数
来源:互联网 发布:祝别人生日网站源码 编辑:程序博客网 时间:2024/06/10 01:45
【C++, C#】
引用传递:实际上,传递过去的实参的内存heap里面的地址, 自然在函数里面使用形参,改变的也就是heap里面的东西。就算函数里面的形参,出了函数体失效,那么heap里面的值实际上已经在函数里面修改了,达到了效果。
在C++里面, 默认都是按照值传递,除非声明函数的时候,使用了&来标识是要用引用来传递。
对于数组,另外处理, 传递过去的都是数组的头元素的地址。所以函数不要写成:
Void PrintArray(int intArray[10])
这样默认给用户提示,这个数组是10个元素, 实际上仅仅有个首地址,其他的事不知道的。
Void PrintArray(int* intArray, int count)
这样才对,告诉用户有多少个元素在里面。
如果仅仅read, 不需要函数做修改的话,最好加上 const:
Void PrintArray(cosnt int* intArray, int count)
效率: 值传递需要拷贝,所以需要更多一些时间。
我做了一个试验:
直接传递vector: 9594ms
引用传递vector: 9534ms
20次,省60ms,效率上还是有区分的。
在C#里面, 默认都是按照声明的形参来做的:形参为class、引用类型的,按照引用类型来传递; 形参为struct、值类型的, 按照值拷贝传递。
所以,C#在处理这些的时候,效率都差不多,比C++差一些。 但实际使用上简单的多。
关键字ref, out就是为了模仿C++里面的&传递的。
Ref: 实参在使用前申明,并初始化, 在函数体里面-形参直接使用。
Out: 实参申明一下即可, 在函数体里面-形参里面初始化,再使用。
Ref, out在编译情况下是一样的,所以不能重载ref, out。仅仅在runtime才有区别。
Void printValue(ref int intValue);
Void PrintValue(out int intValue);
在同一个类里面出现,编译器会报:
error CS0663: cannot define overloaded methods that differ only on ref and out
使用C#的人享受一些编程快感,程序运行效率差些。
使用C++的人,享受编程苦感, 程序运行效率高些。
如此而已。
- 函数参数栈传递
- 函数传递参数
- 函数参数传递
- 函数的参数传递
- 函数的参数传递
- 传递参数给函数
- AS3 函数 传递参数
- 函数参数传递实验
- 函数参数传递->指针
- 函数参数的传递
- 函数参数传递指针
- 函数的参数传递
- 体会函数参数传递。。
- 体会函数参数传递
- 体会函数参数传递
- 体会函数参数传递
- 体会函数参数传递
- 体会函数参数传递
- WinDbg配置和使用基础
- nagios初步功能配置及运行
- java中进度条不能更新问题的研究
- 关于数据库乱码的问题 留个脚印
- 面试通知
- 函数传递参数
- SQL Server 2000数据库备份与恢复(DELPHI版本)-
- 出现 java.util.ConcurrentModificationException 时的解决办法
- 做人、做事,做架构师——架构师能力模型解析
- SQL操作全集
- 诺基亚仍质疑谷歌Android 暂不加入OHA联盟
- sendEmail.py
- 谷歌:Viacom起诉YouTube会威胁2亿网民自由
- 网站设计中应避免的43个错误