这篇文章主要介绍了C++二级指针和指针的引用,下文举例实现形参指针改变实参指针所指向的对象,需要的小伙伴可以参考一下,希望对你的学习有所帮助
目的:形参指针改变实参指针所指向的对象(即地址)
举例:pointer指针指向白鸭子whiteDuck,如果想要设计一个函数,这个函数能够令pointer指向黑鸭子blackDuck。
图示如下:
代码简示如下:
Duck *duck = &oldDuck;
someFunction(duck);
// 此时duck指向newDuck;1、形参与实参均为指针时达不到此目的
此时,二者指向同一地址,可以对同一对象进行操作。但是形参指针不能改变实参指针所指向的地址,因为二者是两个完全无关的指针对象。函数传递参数时,将实参指针的值传递给形参指针,是一个值传递的过程。
2、解决方案——指针引用或二级指针
为了让函数能够更改实参指针所指向的地址,需要将实参的地址传入函数。
此时有两种策略来实现目的:
- 形参为二级指针**p;
- 形参为指针引用*&p;
下面分别对两种方式进行介绍,并提供相应的代码。
其中Duck类的定义如下:
class Duck {
public:
Duck(int color) { this->color = color; }
// 0表示白色,1表示黑色
int color = 0;
};(1)形参为二级指针**p
此时,实参为指针的地址,形参为指针的指针,即形参指向实参。形参对实参进行操作,而不是对实参指向的地址进行操作。
void changeObject(Duck **p) {
*p = new Duck(1);
}
// 调用方式
changeObject(&pointer);(2)形参为指针引用*&p
指针引用即指针的引用,指针引用同样是针对指针进行操作,而不是针对指针指向的地址进行操作:
void changeObject(Duck *&p) {
p = new Duck(1);
}
// 调用方式
changeObject(pointer);3、总结
不管是C还是C++,指针都是非常重要的概念,使用的频率也较高。二级指针和指针引用并不是完全相等的两个概念,比如引用不能改变其指向的对象,但是指针可以指向任意的对象。
到此这篇关于C++二级指针和指针的引用的文章就介绍到这了,更多相关C++指针引用内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C++二级指针和指针的引用
- C语言qsort()函数的使用方法详解 2023-04-26
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Easyx实现扫雷游戏 2023-02-06
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- Qt计时器使用方法详解 2023-05-30
- ubuntu下C/C++获取剩余内存 2023-09-18
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
