IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++ 指针的引用和指针的指针 -> 正文阅读

[C++知识库]c++ 指针的引用和指针的指针

??在学习数据结构时发现函数中修改指针参数的值无效,学习之后发现,把指针作为一个参数传递给函数时,是将指针的副本传递给了函数,所以在函数中修改指针参数只是修改了指针的copy而不是指针本身,解决方法:
1.指针的引用

struct BitTree
{
    BitNode<ElemType> *root = nullptr;
} 

struct BitNode{
    ElemType data;
    struct BitNode<ElemType> *lchild = nullptr,*rchild = nullptr; // 左右孩子指针

    BitNode(){}
    BitNode(ElemType e): data(e) {}
};

int BST_insert(BitNode<int>*& node, int e) // 二叉排序树的插入
{
    if(!node) 
    {
        node = new BitNode<int>(e); 
        BitNode<int> n = (*node);
        cout<<"*node:"<<n.data<<endl;
        return 1;
    }else if(e == node->data) 
        return 0; // 存在相同关键值的节点,插入失败
    else if(e > node->data) 
        return BST_insert(node->rchild, e);
    else 
        return BST_insert(node->lchild, e);
}

//实现
void testBST()
{
    srand(time(0));
    BitTree<int> bt1;
    for(int i = 10; i > 0;i--)
    {
        int randnum = rand() % 100;
        BST_insert(bt1.root, randnum);
    }
    inOrder(bt1.root);
}

BST_insert(BitNode*& node, int e)
node: 指针的引用,即testBst里的bt1.root的引用,类型:BitNode*
*node: 即testBst里bt1.root指针指向的BitNode类,类型:BitNode

输出:最后一行为二叉排序树的中序遍历输出
在这里插入图片描述

2.指针的指针

int BST_insert(BitNode<int>** node, int e) // 二叉排序树的插入
{
    if(!(*node)) 
    {
        *node = new BitNode<int>(e); 
        return 1;
    }else if(e == (*node)->data) 
        return 0; // 存在相同关键值的节点,插入失败
    else if(e > (*node)->data) 
        return BST_insert(&(*node)->rchild, e);
    else 
        return BST_insert(&(*node)->lchild, e);
}

void testBST()
{
    srand(time(0));
    BitTree<int> bt1;
    for(int i = 10; i > 0;i--)
    {
        int randnum = rand() % 100;
        BST_insert(&bt1.root, randnum);
    }
    inOrder(bt1.root);
}

BST_insert(BitNode** node, int e)方法中
node: 指针的指针,存储指向指针的指针地址,一般不做修改,类型为BitNode**
*node: 被指向的指针,修改它可以修改被指向的指针的内容,即testBST方法里的bt.root,类型为BitNode*
**node: 两次解引用是指向testBST方法里的bt1.root指向的类对象,类型为BitNode

在testBST中:
&bt1.root即获取bt.root的地址,类型为BitNode**

参考文章 https://www.cnblogs.com/li-peng/p/4116349.html

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:05:17  更:2021-07-16 11:07:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/29 0:19:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码