欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C++二级指针和指针的引用

时间:2022-10-30 11:08:59|栏目: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语言实现飞机游戏(1)

栏    目:C代码

下一篇:VSCode IDE 配置环境过程解析

本文标题:C++二级指针和指针的引用

本文地址:http://www.codeinn.net/misctech/217735.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有