理解C++传值传址引用调用
Posted u012507022
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解C++传值传址引用调用相关的知识,希望对你有一定的参考价值。
使用C++很长时间,对一些最基本的知识点不求甚解,有时会犯很低级的错误,并且这些bug在调试中很难发现。以前只了解传值、传址、引用调用的区别,没有深入了解,今天稍微总结一下,今后慢慢深入。
1.传值调用
在传值调用时,实参被拷贝了一份,然后在函数体内使用,函数体内修改参数变量时修改的只是实参的一份拷贝,而实参本身没有改变。通过例子来看,代码运行结果:
void funcValue(int a_Fml)
cout << "&a_Fml:" << &a_Fml << endl;
cout << "a_Fml:" << a_Fml << endl;
int main()
int a_Act = 123;
cout << "&a_Act:" << &a_Act << endl;
cout << "a_Act:" << a_Act << endl;
funcValue(a_Act);
system("pause");
ret
形参a_Fml是实参a_Act的一个拷贝,所以a_Fml与a_Act的地址不同,值相同。
2.传址调用
传址调用时,把实参的地址传给形参;指针作为参数在函数中传递的时候,它的实质依然是值传递,形参只是实参的一份拷贝,他们分别属于不同的两个指针变量。两个指针变量的地址肯定是不一样的,值是一样的,指向相同的内存。代码运行结果与传值调用结果一样。
void funcAddr(int *a_Fml)
cout << "&a_Fml:" << &a_Fml << endl;
cout << "a_Fml:" << a_Fml << endl;
int main()
int temp = 123;
int *a_Act = &temp;
cout << "&a_Act:" << &a_Act << endl;
cout << "a_Act:" << a_Act << endl;
funcAddr(a_Act);
system("pause");
return 0;
补充:如果在函数中改变了改变了a_Fml指向的内存空间,然后再对a_Fml进行操作,便不会影响a_Act。
3.引用调用
引用调用时,形参是实参的引用,实参与形参拥有相同的地址。系统对传过来的参数没有拷贝,不会有任何额外开销,直接使用原始变量的内存空间。所以说,引用调用是比传址更高效的调用方式。引用代码运行结果如下:
void funcRef(int &a_Fml)
cout << "&a_Fml:" << &a_Fml << endl;
cout << "a_Fml:" << a_Fml << endl;
int main()
int a_Act = 123;;
cout << "&a_Act:" << &a_Act << endl;
cout << "a_Act:" << a_Act << endl;
funcRef(a_Act);
system("pause");
return 0;
以上是关于理解C++传值传址引用调用的主要内容,如果未能解决你的问题,请参考以下文章