首页 > 其他分享 >56、二级指针

56、二级指针

时间:2024-04-09 19:05:19浏览次数:19  
标签:二级 函数 56 地址 指针 ptr 变量

指针指针变量的简称,也是变量,是变量就有地址

指针用于存放普通变量地址

二级指针用于存放指针变量地址

声明二级指针的语法:数据类型** 指针名;

使用指针有两个目的:1)传递地址;2)存放动态分配的内存的地址。

在函数中,如果传递普通变量的地址,形参用指针;传递指针的地址,形参用二级指针。

把普通变量的地址传入函数后可以在函数中修改变量的值;把指针的地址传入函数后可以在函数中指针的值。

下面是一个C++示例代码,展示了如何使用二级指针(指针的指针)。这个示例中,我们将创建一个函数,该函数通过二级指针修改一级指针的值,进而改变普通变量的值。这个例子很好地说明了二级指针的两个主要用途:传递地址和存放动态分配的内存的地址。

示例代码:

#include <iostream>
using namespace std;

// 函数用二级指针作为参数,目的是修改一级指针的值
void modifyPointerValue(int** doublePtr) {
    // 动态分配一块新的内存,并通过二级指针修改一级指针的值
    *doublePtr = new int(20);
}

// 函数用指针作为参数,目的是修改普通变量的值
void modifyValue(int* ptr) {
    *ptr = 10;
}

int main() {
    int a = 5;
    int* ptr = &a;
    int** doublePtr = &ptr;

    cout << "原始的a值:" << a << endl; // 输出:原始的a值:5
    modifyValue(ptr);
    cout << "修改后的a值:" << a << endl; // 输出:修改后的a值:10

    modifyPointerValue(doublePtr);
    cout << "通过二级指针修改后的a值:" << *ptr << endl; // 输出:通过二级指针修改后的a值:20

    // 释放动态分配的内存
    delete ptr;

    return 0;
}

解析:

  1. 首先,我们声明了一个普通的整型变量a并初始化为5。
  2. 然后,我们声明了一个指针ptr,它存储了变量a的地址。
  3. 接下来,我们声明了一个二级指针doublePtr,它存储了指针ptr的地址。
  4. 通过调用modifyValue函数,并传入指针ptr作为参数,我们可以修改a的值。这个函数演示了如何使用一级指针在函数内修改普通变量的值。
  5. 通过调用modifyPointerValue函数,并传入二级指针doublePtr作为参数,我们可以改变一级指针ptr所指向的地址。这个函数演示了二级指针如何用来修改一级指针的指向。
  6. 最后,我们需要释放通过二级指针分配的内存,以避免内存泄露。

这个示例清楚地展示了二级指针的强大功能,它不仅可以用来在函数中修改普通变量的值,还可以改变指针本身的指向。这在需要在函数中动态分配内存或修改指针指向时非常有用。

标签:二级,函数,56,地址,指针,ptr,变量
From: https://blog.csdn.net/wuyihao123/article/details/137540815

相关文章

  • C语言:指针详解(2)
    目录一、数组名的理解二、使用指针访问数组三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组正文开始一、数组名的理解在上一篇博客中我们在使用指针访问数组的内容时有这样的代码:intarr[10]={1,2,3,4,5,6,7,8,9,10};int*p=&arr[0];这里我......
  • 操作系统综合题之“采用二级页表的分页存储管理方式,计算页目录号的位数 和 页的大小,给
    一、问题:某计算机系统的主存按字节编址,逻辑地址和物理地址都是32位,其内存管理采用练级页表的分页存储管理方式。逻辑地址中页号为10位,页内偏移地址为12位。该计算机系统的两级页表结构如下图所示,图中数值均为十进制数1.页目录号的位数为多少?页的大小为多少KB?2.如果页目录项大小......
  • CF156D-Prufer序列、多项式定理
    link:https://codeforces.com/contest/156/problem/D题意:给一张无向简单图\(G\),问有多少种加边的方式,使得图联通,并且需要加的边最小。\(|E|,|V|\leq10^5\),对\(k\)取模前置知识应该是Prufer序列(这题应该是绕不开这个东西)对每个连通分支考虑答案,如果有\(k\)个连通分支,大小......
  • 低功耗抗噪/高抗干扰,LCD显示驱动控制电路(IC)-VK2C23A/B LQFP48/64 替代市面上16C23,56*4
    VK2C23是一个点阵式存储映射的LCD驱动器,可支持最大224点(56SEGx4COM)或者最大416点(52SEGx8COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,也可通过指令进入省电模式。其高抗干扰,低功耗的特性适用于水电气表以及工控仪表类产品。L23+01特点:•工作电压2.4-5.5V•内......
  • 20240408,C++数组,函数,指针
    是谁说回老家学习结果摆烂了两天,是我,Π—Π! Π—Π!! 一,数组——同C1.1一维数组1.0  相同类型,连续内存,1.1  定义格式:数据类型数组名【长度】;数组类型数组名【长度】={1,2,3,……};数组类型数组名【】={1,2,3,……};1.2  遍历数组,初始化,下标【0-N】1.3  数组名:数......
  • 【C语言】深入了解指针(2),进来小白,出去大佬!
    目录1,const修饰指针1.1,const修饰变量1.2,const修饰指针变量2,指针运算2.1,指针+-整数 2.2,指针-指针2.3,指针的关系运算3,野指针3.1,野指针成因1, 指针未初始化2.,指针越界访问3,指针指向的空间释放3.2,如何规避野指针1,指针初始化2,⼩⼼指针越界3,指针变量不再使⽤时,及时......
  • C语言——指针(1)
    一、什么是指针?指针(Pointer)是编程语言中一种重要的数据类型它,它用于存储变量的内存地址。换句话说,指针指向内存中的某个位置,其内容就是地址,这个地址指向存储的数据,程序可以直接访问和操作内存中的数据,这为动态内存分配、函数传参、数组访问等操作提供了便利和灵活性。总的来说......
  • 2-44. 设置鼠标指针根据物品调整
    下载好看的鼠标图片修改Canvas的Tag添加CursorImage添加CursorManager把CursorImage放到第一个位置编辑CursorManager让虚拟鼠标跟随鼠标移动鼠标的尖点不是虚拟鼠标的尖点,需要用aseprite修改图片然后将鼠标的锚点切换为下图所示的锚点坐标即可......
  • C语言:指针详解(1)
    目录一、内存和地址二、指针变量和地址三、指针变量类型的意义四、const修饰指针五、指针运算六、野指针七、assert断言八、指针的使用和传值调用在正式学习指针之前,我们先要理解在C/C++中两个非常重要的概念——内存和地址。正是有这两种因素的存在,才使得C/C++拥有......
  • MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
    数据结构我们知道MySQL的存储引擎Innodb默认底层是使用B+树的变种来存储数据的下面我们来复习一下B树存储+B树存储 +哈希存储的区别哈希存储,只能使用等值查询B树与B+树存储我们知道B+树实际上就是B树的变种那么为啥使用B+树而不是使用B树呢?我们知道效率的高低......