C++如何返回嵌套类的数组类成员
C++ How may I return an array class member of a nested class?
这不是一个真正的问题,因为我自己已经解决了这个问题,但当数组是嵌套类的类成员时,我仍然需要澄清将数组地址分配给相同类型指针的机制。
下面的代码完全正常工作,尽管它可能缺少一些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]);。
您正在返回地址,即指针。引用意味着其他东西。
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- C++:带有 "auto" 的二维数组上的嵌套 For 循环
- 获取嵌套的 JSON 数组和矩阵C++
- 使用嵌套函数数组是个好主意吗?
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 具有动态数组分配的OpenMP嵌套循环
- 比较嵌套 for 循环中的两个 wchar 数组?
- 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?
- 将嵌套的 std::arrays 视为具有链式 .data() 的单个平面数组
- 用于在一维数组上嵌套循环操作的正确 openmp 指令
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 数组嵌套的代理
- C 无法使用嵌套环将数组的元素索引
- 嵌套在功能数组中的循环
- 嵌套调用中的数组运算符 (->) 重载
- C 从嵌套循环中的文件中读取,并将值分配给二维数组
- 如何初始化嵌套结构数组
- 如何使用嵌套的 if 语句检查字符数组
- 在与 OpenMP 并行的嵌套 for 循环中写入共享数组(通过指针)如何产生错误的结果