C++如何返回嵌套类的数组类成员

C++ How may I return an array class member of a nested class?

本文关键字:嵌套 数组 成员 返回 何返回 C++      更新时间:2023-10-16

这不是一个真正的问题,因为我自己已经解决了这个问题,但当数组是嵌套类的类成员时,我仍然需要澄清将数组地址分配给相同类型指针的机制。

下面的代码完全正常工作,尽管它可能缺少一些error_check。这只是为了展示我是如何让我的(真正的)程序发挥作用的。


HEADER(链接列表)

class linkedList
{
public:
    linkedList();
    ~linkedList();
    int* getArray();
    void forward();
private:
    class listNode
    {
    public:
        listNode();
        ~listNode();
        friend class linkedList;
    private:
        int array[3];
        listNode* next;
    };
    listNode *first;
    listNode *current;
};

CPP(链接列表)

linkedList::linkedList()
{
    first = new listNode;
    current = first;
}
//~~~~~~~~~~~~
linkedList::~linkedList()
{
    delete first;
    first = 0;
    current = 0;
}
//~~~~~~~~~~~~
int* linkedList::getArray()
{
    if (current)
    {
        return &(current->array[0]);
    }
}
//~~~~~~~~~~~~
void linkedList::forward()
{
    if (current->next)
    {
        current = current->next;
    }
}
//-------------------------
//-------------------------
//-------------------------
linkedList::listNode::listNode()
{
    next = 0;
    for (int i = 0; i < 3; i++){array[i]=((i+1)*3);}
}
//~~~~~~~~~~~~
linkedList::listNode::~listNode()
{
}

CPP(主要)

#include <iostream>
#include "linked_list.h"
using namespace std;
int main()
{
    linkedList list;
    int *myArray;
    myArray = list.getArray();
    for (int i = 0; i < 3; i++){cout << myArray[i] << " ";}/**/cout << "nn";
    return 0;
}

真正的程序是在一个由节点组成的链表中移动,这些节点在int类型的数组中包含3个整数值,检索这三个值,并将它们用作其他函数的参数。

现在,要做到这一点,我必须通过访问器return包含在节点中的数组的第一个元素的地址。显然,唯一的方法是返回对linkedList的成员变量current所指向的节点中数组第一个元素的引用:
return &(current->array[0]);

为什么?

我已经通过反复尝试找到了这个解决方案,但对导致我按原样构建这个表达式的原因知之甚少。通常,当你想把数组的地址分配给指针时,你只需要这样做:

int main()
{
    int array[3];
    int* pArray;
    pArray = array;
}

就是这样,因为数组本身的名称足以检索其第一个元素的地址。

通过这样做(测试)可以获得完全相同的结果:

int main()
{
    int array[3];
    int* pArray;
    pArray = &(array[0]);
}

当访问器从其自己类的成员变量返回地址时,这两种方法也是有效的。

但是,为什么在访问嵌套类的成员变量时,我不得不使用第二个方法呢?是什么逻辑阶段使它成为唯一可行的方法?

但是,为什么在访问嵌套类的成员变量时,我不得不使用第二个方法呢?

你不是:

return current->array;

return &(current->array[0]);

当返回类型为int*时,两者都执行相同的操作。你不会被迫使用第二种方式。

此外,getArray中还有一个错误。如果current为空,则不会返回任何内容。

迂腐。。。

显然,唯一的方法是将引用返回到linkedList的成员变量current所指向的节点中数组的第一个元素:返回&(当前->数组[0]);。

您正在返回地址,即指针。引用意味着其他东西。