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

目录
  • 1、形参与实参均为指针时达不到此目的
  • 2、解决方案——指针引用或二级指针
    • (1)形参为二级指针**p
    • (2)形参为指针引用*&p
  • 3、总结

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

举例: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++指针引用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++中的数组引用和指针引用

    目录 C++中的数组引用和指针引用 一.引用的本质 二.数组的引用 三.指针的引用 C++中的数组引用和指针引用 一.引用的本质 我们在讲解引用之前需要知道为什么C++中会单独提出引用这个概念,在前面也提到在C++从一定角度上是C语言的升级版,其实引用时和C语言中的指针一样的功能,并且使得语法更加简洁.既然提到和指针功能相同,那么引用的功能其实就是给空间取别名. 代码解析: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using nam

  • C++引用和指针的区别你知道吗

    目录 引用 1.引用概念 2.格式 3.引用特性 4.常引用 1.const引用 5.使用场景 1.引用作为参数 2. 引用作为做返回值 6.引用和指针的区别 7.引用和指针的不同点: 总结 引用 1.引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间. 比如:李逵,在家称为"铁牛",江湖上人称"黑旋风 2.格式 类型& 引用变量名(对象名) = 引用实体: 例: void TestRe

  • C++指针与引用的异同

    目录 1.引用与指针的区别 1.1 相同点 1.2 区别 1.引用与指针的区别 指针和引用的原理非常的相似,所以很多时候尤其是面试的时候经常会拿来比较. 本文来梳理一下引用和指针的一些异同. 1.1 相同点 两者都是关于地址的概念. 指针本身是一个变量,它存储的值是一块内存地址,而引用是某一个内存的别名.我们可以使用指针或引用修改对应内存的值. 1.2 区别 引用必须在声明时初始化,而指针可以不用 我们无法声明一个变量引用再给它赋值,只能在声明的同时进行初始化: int a = 3; int &

  • C++的指针,引用和STL详解

    目录 指针.引用 指针 引用 STL STL中六大组件 常用容器用法介绍 vec.front(),vec.back()    返回vector的首尾元素 重载运算符 总结 对象的定义:对象是指一块能存储数据并具有某种类型的内存空间 一个对象a,它有值和地址:运行程序时,计算机会为该对象分配存储空间,来存储该对象的值,通过该对象的地址,来访问存储空间中的值. 指针.引用 指针 类型名 * 指针变量名: 每个变量都被存放在从某个内存地址(以字节为单位)开始的若干个字节中:"指针",也称作&

  • C++指针与引用的区别案例详解

    C++中指针和引用的区别 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个

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

    目录 1.形参与实参均为指针时达不到此目的 2.解决方案——指针引用或二级指针 (1)形参为二级指针**p (2)形参为指针引用*&p 3.总结 目的:形参指针改变实参指针所指向的对象(即地址) 举例:pointer指针指向白鸭子whiteDuck,如果想要设计一个函数,这个函数能够令pointer指向黑鸭子blackDuck. 图示如下: 代码简示如下: Duck *duck = &oldDuck; someFunction(duck): // 此时duck指向newDuck; 1.形参

  • 深入理解c++指针的指针和指针的引用

    展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递. 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值.我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) { p = &m_value; } i

  • C语言中二级指针解析(指向指针的指针)

    目录 二级指针(指向指针的指针) 二级指针的定义与理解 二级指针定义格式 二级指针赋值实例 二级指针(指向指针的指针) 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 int *.double *.char * 等. 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针. 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语

  • C语言玩转指针之指针的高阶玩法

    目录 前言 一.字符指针 二.指针数组和数组指针 1.指针数组 2.数组指针 2.1.数组指针是什么? 2.2.&数组名和数组名的区别 2.3.数组指针的使用 三.数组参数与指针参数 1.一维数组参数 2.二维数组参数 3.一级指针传参 4.二级指针传参 四.函数指针 五.函数指针数组 六.指向函数指针数组的指针 七.回调函数 总结 前言 指针第一篇,万人浏览: [C语言]玩转指针--关于指针,你需要掌握的基础知识! 指针的主题,我们在初级阶段的<指针>章节已经接触过了,我们知道了指针

  • 深入理解数组指针与指针数组的区别

    数组指针与指针数组的区别在于:数组指针p是一个指针,而指针数组p是一个存放N个指针变量的数组. 一.数组指针int (*p)[n]重点:()优先级高([].()的优先级是一样的,但它们的方向是从左至右的,所以先运行括号里的*p),首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度(n*sizeof(int)).如要将二维数组赋给一指针,应这样赋值:       int a[3][4];       int (

  • 函数指针与指针函数的学习总结

    函数指针是指向函数的指针,指针函数是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑.各位能否讲的详细点呢? (1) float(**def)[10]   def是什么?(2) double*(*gh)[10]   gh是什么?(3) double(*f[10])()   f是什么?(4) int*((*b)[10])    b是什么?这样老感觉有点乱,有什么窍门可以记得并理解的清楚一点么? ======================解答:   (1) def是一个指针, 指向的对象

  • C语言入门篇--初识指针和指针变量

    1.指针 指针就是地址(即一个数据). 2.指针变量 2.1概念 (1)指针变量是变量,是变量在内存中就会开辟空间,会有自己对应的的地址,有自己的变量大小. (2)指针变量里放的内容是地址(即指针). 2.2指针变量大小 32位平台下,4字节. 48位平台下,8字节. 2.3指针变量理解 理解前一定先看看,地址相关知识. #include <stdio.h> int main() { int a = 10; int *p = &a;//p为指针变量 printf("a的地址=

  • C语言中下标与指针的转换以及指向指针的指针的例子

    下标到指针之间和转换 以下的程序做了什么. #include <stdio.h> int main() { int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; int i = 0; int j = 0; for(i = 0; i<3; i++) { for(j=0; j<3; j++) { printf("%d\n", *(*(a+i)+j)); } } } 打印了数组中的每个元素: 指向指针的指针 #include

  • 详解C语言中的常量指针和指针常量

    概述 对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区别 常量指针 让我们先来理解什么是常量指针.常量指针是指指针指向的地址是常量.换句话说,一旦常量指针指向了一个变量,你不能让该常量指针指向其他变量了 常量指针的声明方法如下: <type of pointer> * const <name of pointer> 常量指针声明示例:

  • 深入解析C++中的指针数组与指向指针的指针

    指针数组定义:如果一个 数组,其元素均为指针型数据,该数组为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址. 形式:一维指针数组的定义形式为:int[类型名] *p[数组名] [4][数组长度];由于[ ]比*优先级高,因此p先与[4]结合,形成p[4]的数组的形式.然后与p前面的" * "结合," * "表示此数组是指针类型的,每个数组元素都相当于一个指针变量,都可以指向整形变量. 注意:不能写成int (*p)[4]的形式,这是指的

随机推荐