C/C++中的实参和形参
实参和形参,很抽象的一个概念,新手很难搞懂。其实各种书籍把他讲得很明白,但是就是看不懂。中国人就喜欢把简单的问题复杂化。我草,我也是深受其害。
先说C语言:
只要知道了按值传递和按地址传递的区别,就会明白实参和形参的具体工作细节。
1)按值传递(不能改变实参)
实参是变量,表达式等数值。
函数调用的时候,实参和形参存在于内存中2快不同的区域,实参先自己复制一份拷贝,再把拷贝传给形参。由于是传递的是拷贝,所以实参不会受形参的影响,实参值不会被改变。
2)按地址传递(可以改变实参)
实参是指针。
函数调用的时候,指针传给你,形参和实参指针都一样,对形参的任何操作就等于对实参的操做。实参的值就可以被改变。
再说C++:
C++有引用来代替指针这种落后的类型。
1)const引用传递(不能改变实参)
和上面的C中按值传递的效果一样,但是效率高一些,因为引用是不用拷贝实参的,减少了复制的开销。const就决定了不能改变实参。
2)按引用传递(可以改变实参)
引用其实大部分情况下和指针一样,对形参的任何操作就等于对实参的操做。实参的值就可以被改变。要不变,就学上面加个const。
实际应用中,形参有3种用法:
1)f(int X)
这C语言的用法,实参是数值,就不变;实参是指针,就可以改变。
2)f(int& X)
C++的用法,实参可以改变。
3)f(const int& X)
C++的用法,实参不变。
什么时候用哪一种呢?就是取决于是否改变实参!!!
建议用C++的用法,虽然C++兼容C。
本帖最后由 tiankai001 于 2014-10-30 23:29 编辑