服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++二级指针和指针的引用

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

2022-10-14 12:59机器学习入坑者 C/C++

这篇文章主要介绍了C++二级指针和指针的引用,下文举例实现形参指针改变实参指针所指向的对象,需要的小伙伴可以参考一下,希望对你的学习有所帮助

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

目的:形参指针改变实参指针所指向的对象(即地址)

举例:pointer指针指向白鸭子whiteDuck,如果想要设计一个函数,这个函数能够令pointer指向黑鸭子blackDuck。

图示如下:

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

代码简示如下:

?
1
2
3
Duck *duck = &oldDuck;
someFunction(duck);
// 此时duck指向newDuck;

1、形参与实参均为指针时达不到此目的

此时,二者指向同一地址,可以对同一对象进行操作。但是形参指针不能改变实参指针所指向的地址,因为二者是两个完全无关的指针对象。函数传递参数时,将实参指针的值传递给形参指针,是一个值传递的过程。

2、解决方案——指针引用或二级指针

为了让函数能够更改实参指针所指向的地址,需要将实参的地址传入函数。

此时有两种策略来实现目的:

  • 形参为二级指针**p;
  • 形参为指针引用*&p;

下面分别对两种方式进行介绍,并提供相应的代码。

其中Duck类的定义如下:

?
1
2
3
4
5
6
class Duck {
public:
    Duck(int color) { this->color = color; }
    // 0表示白色,1表示黑色
    int color = 0;
};

(1)形参为二级指针**p

此时,实参为指针的地址,形参为指针的指针,即形参指向实参。形参对实参进行操作,而不是对实参指向的地址进行操作。

?
1
2
3
4
5
void changeObject(Duck **p) {
    *p = new Duck(1);
}
// 调用方式
changeObject(&pointer);

(2)形参为指针引用*&p

指针引用即指针的引用,指针引用同样是针对指针进行操作,而不是针对指针指向的地址进行操作:

?
1
2
3
4
5
void changeObject(Duck *&p) {
    p = new Duck(1);
}
// 调用方式
changeObject(pointer);

3、总结

不管是C还是C++,指针都是非常重要的概念,使用的频率也较高。二级指针和指针引用并不是完全相等的两个概念,比如引用不能改变其指向的对象,但是指针可以指向任意的对象。

到此这篇关于C++二级指针和指针的引用的文章就介绍到这了,更多相关C++指针引用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://zhuanlan.zhihu.com/p/120069064

延伸 · 阅读

精彩推荐
  • C/C++C++深度优先搜索的实现方法

    C++深度优先搜索的实现方法

    这篇文章主要介绍了C++深度优先搜索的实现方法,是数据结构中非常重要的一种算法,需要的朋友可以参考下...

    C++教程网6582021-01-28
  • C/C++C语言俄罗斯方块游戏课程设计

    C语言俄罗斯方块游戏课程设计

    这篇文章主要为大家详细介绍了C语言俄罗斯方块游戏课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    C语言教程网6672021-11-16
  • C/C++C语言实现学生成绩管理系统

    C语言实现学生成绩管理系统

    这篇文章主要为大家详细介绍了C语言实现学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    Lu_1u10142021-06-15
  • C/C++C语言中scanf与scanf_s函数的使用详解

    C语言中scanf与scanf_s函数的使用详解

    本文主要介绍了C语言中scanf与scanf_s函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    许同学。。12092022-01-24
  • C/C++C语言/C++如何生成随机数

    C语言/C++如何生成随机数

    这篇文章主要介绍了C语言/C++如何生成随机数,C语言/C++产生随机数主要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数,如何解决...

    牧云者6632021-03-30
  • C/C++新手小心:c语言中强符号与弱符号的使用

    新手小心:c语言中强符号与弱符号的使用

    本篇文章适合新手。是对c语言中强符号与弱符号的使用进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网3212020-12-03
  • C/C++OpenCV如何提取图片中曲线

    OpenCV如何提取图片中曲线

    这篇文章主要为大家详细介绍了OpenCV如何提取图片中曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    看艾薇的熊猫4422021-07-17
  • C/C++详解C语言初阶基础(2)

    详解C语言初阶基础(2)

    这篇文章主要介绍了C语言中的初阶基础,介绍了其相关概念,具有一定参考价值。需要的朋友可以了解下,希望能够给你带来帮助...

    鲸落之·海6732022-02-22