本帖最后由 tiankai001 于 2014-10-30 23:29 编辑
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。
|