栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

这是一个指向指针变量地址的指针变量

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

这是一个指向指针变量地址的指针变量

这是一个指向指针变量地址的指针变量(指针变量的指针) 一、前言

在链表数据结构中,在实现根据位置获取链表结点的方法(getByIndx)时,可以直接循环查询然后返回结点的指针。但由于之前的操作都是返回操作的状态码,如成功返回OK,索引越界返回OVERFLOW等,为了保持操作格式的规范,需要对方法进一步处理。

#include 

#define OK 200
//#define ERROR -404
#define OVERFLOW 300

using namespace std;
typedef int Status;

class ListNode {
private:
    int data;  // 头结点数据域不存储数据,只存储链表的长度
public:
    ListNode* next;
    // 定义3个构造方法
    ListNode();
    ListNode(const int *a, int n);
    explicit ListNode(int val);

    int getData() const;

    // 定义3个操作函数:根据位置返回节点ptr,将newNode结点插入第i个位置,根据位置删除节点
    Status insertNode(int i, ListNode *newNode);
    Status delByIndx(int i);
    void display() const;
};

思路:在保持方法数据规范的前提下,在getByIndx方法中,增加一个指针参数用于接收目标结点的返回值。 二、使用指针作为参数的技巧

指针参数接收返回值的使用概括起来就是,需要接收谁的返回值,就传谁的指针作为形参,即要修改谁就传谁的指针变量作为形参。例如,在根据位置查询结点的方法中,使用结点指针(ListNode*)接收返回值,那么就使用结点指针的指针(ListNode**)作为形参。方法实现如下

#define OVERFLOW 300
#define OK 200
typedef int Status;
...
Status ListNode::getNodeByIndx(int i, ListNode **ptr) {
    if(i < 1 || i > data)  // 此代码中头节点的数据域存放链表长度数据。
        return OVERFLOW;
    ListNode *p = this;
    for(int j = 0; j < i; j ++)
        p = p->next;
    *ptr = p;
    return OK;
}

在main方法中调用的示例

ListNode *p_idx = nullptr;
Status code;
cin >> loc;
code = head->getNodeByIndx(loc, &p_idx);  // 使用&取址操作符传入指针变量的地址
if(code == OK)
    cout << p_idx->getData() << endl;
else if(code == OVERFLOW)
    cout << "输入索引不合法!" << endl;
else if(code == ...)
    ...

这样可以让操作方法的格式保持较高的一致性,

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号