C++指针做形参与指针的引用做形参的区别
2021/6/2 12:24:08
本文主要是介绍C++指针做形参与指针的引用做形参的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在C++编程时,有时需要用指针做参数,并在调用函数后,改变指针的内容。例如下面的程序
(1)*p直接修改指向的内容
#includeusing namespace std; void func(int *p) { *p = 456; //修改了指针指向的值 } int main() { int num = 123; int* pN = # cout << *pN << "地址" << pN <<endl; func(pN); cout << *pN << "地址" << pN << endl; return 0; }
输出如下:
在程序外面,pN地址存的值是123,经过函数func后,改变了pN的值,这样,第二次cout的结果就是456。
如果是下面的写法,那就有问题了
(2)在函数内部修改指针的地址
#includeusing namespace std; void func(int *p) { //*p = 456; //修改了指针指向的值 int value = 456; p = &value; } int main() { int num = 123; int* pN = # cout << *pN << endl; func(pN); cout << *pN << endl; return 0; }
输出结果
此时在函数func里,p接收了value的地址,但是并没有改变p指向的内容,此时的p = &value, 仍然是值传递,即使value生命周期是全局的也没用,因为此时用 p = &value, 修改的pN的副本,并不是pN本身。如果在开发中,中间写了很多代码,突然写一句p = &value, 那就起不到改变指针指向的内容的效果。
(3)指针的引用传参
当然如果是指针的引用那就不一样了,还是会改变指针指向的内容,代码如下:
此时的效果和(1)是一样的,改变了pN指向的内容,cout后,*pN = 456. 这种写法看着有点别扭。
一般带有引用&都会改变形参的值,C++开发如果怕内存泄漏,如果不想用指针做形参,那么可以用引用,必要的时候用指针。
例如,最常见的两数交换的各种写法,如下
#includeusing namespace std; void swap1(int num1, int num2) { int t = num1; num1 = num2; num2 = t; } void swap2(int &num1, int &num2) { int t = num1; num1 = num2; num2 = t; } void swap3(int* p1, int* p2) { int t = *p1; *p1 = *p2; *p2 = t; } int main() { int a = 100, b = 200; cout << "a = " << a << " , b = " << b << endl; swap1(a, b); cout << "a = " << a << " , b = " << b << endl; swap2(a, b); cout << "a = " << a << " , b = " << b << endl; int c = 100, d = 200; swap3(&c, &d); cout << "c = " << c << " , d = " << d << endl; return 0; }
输出结果
这篇关于C++指针做形参与指针的引用做形参的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator
- 2024-12-31自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
- 2024-12-31自学记录鸿蒙 API 13:实现人脸检测 Core Vision Face Detector
- 2024-12-31在C++中的双端队列是什么意思,跟消息队列有关系吗?-icode9专业技术文章分享
- 2024-12-31内存泄漏(Memory Leak)是什么,有哪些原因和优化办法?-icode9专业技术文章分享
- 2024-12-31计算机中的内存分配方式堆和栈有什么关系和特点?-icode9专业技术文章分享
- 2024-12-31QT布局器的具体使用原理和作用是什么?-icode9专业技术文章分享
- 2024-12-30用PydanticAI和Gemini 2.0构建Airflow的AI助手