关于传值、传引用、传地址的一点小理解
2017-04-22 12:21
183 查看
关于传值、传引用、传地址的一点小理解
传值传引用
传地址(两种)
函数的形参可以是传值,传地址,传引用。
其中,传值(fun(string str))不可以改变要传递的变量。
int main() { string str3="abc"; trans_X(str3); cout<<str3<<endl; return 0; } string trans_X(string str) { for(auto &c:str) { c='X'; } return str; }
结果为abc。
而传引用(fun(string &str))和传地址(fun(string *str))可以改变要传递的变量。
先来看看传引用。
int main() { string str3="abc"; trans_X(str3); cout<<str3<<endl; return 0; } string trans_X(string &str) { for(auto &c:str) { c='X'; } return str; }
结果是XXX。
接下来是传地址。
int main() { string str3="abc"; trans_X(&str3); cout<<str3<<endl; return 0; } string trans_X(string *str) { for(auto &c:(*str)) { c='X'; } return *str; }
结果是XXX。
其中,形参还可以是const常量,默认函数对要传进来的参数不作修改。
传常量值,fun(const string str)不能修改str变量,只能将str用于赋值。
传常量引用,fun(const string &str)不能修改str变量,只能将str用于赋值。
传顶层const指针,fun(string * const str)可以修改str指向的变量,但是不能修改str,即不能修改str的指向。
传底层const指针,fun(const string *str)不可以修改str指向的变量。
相关文章推荐
- 关于AS3中弱引用的一点理解(转载)
- 关于引用对象的使用的一点小理解
- 关于AS3中弱引用的一点理解
- 关于AS3中弱引用的一点理解
- 关于iOS block循环引用的一点理解
- 关于C#对象引用疑惑的理解
- 关于openlayers中namespace的一点理解
- 关于Ndis驱动的一点个人理解
- 关于 a:active 的一点理解 [CSS]
- 关于BMP图片的一点理解,读取图象数据到数组
- 关于龙芯拿MIPS授权的一点理解
- 我的一点浅见——关于机器的理解
- C#中有关于:按 值 和 引用 传递参数 的理解
- 关于Asp.net web控件事件处理的一点理解
- 关于MOSS的引用地址问题
- 一个草根关于OO的一点理解
- 对引用类型的一点理解
- 关于安全共性服务构件的一点理解
- 关于反射的一点理解(一)
- 关于KMP算法的一点个人理解