这不是一个真正的问题,因为我自己已经解决了这个问题,但是当数组是一个类的成员时,我仍然需要一些关于将数组的地址赋给相同类型的指针的机制的澄清。嵌套类。
以下代码完全正常运行,但可能缺少一些error_check。它只是为了说明我如何使我的(真实)程序工作。
[DataMember]
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;
};
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()
{
}
真正的程序是通过由int类型数组中包含3个整数值的节点组成的链表,检索这三个值并将它们用作其他一些函数的参数。
现在,要做到这一点,我必须通过访问器#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 << "\n\n";
return 0;
}
地址到节点中包含的数组的第一个元素。
显然,唯一的方法是将引用返回到return
的成员变量linkedList
所指向的节点中数组的第一个元素:
current
。
为什么呢?
我已经通过试验和错误得到了这个解决方案,而且很少知道导致我按原样构建这个表达式的原因。 通常,当您想要将数组的地址分配给指针时,您只需这样做:
return &(current->array[0]);
就是这样,因为数组本身的名称足以检索其第一个元素的地址。
通过这样做(测试)可以获得完全相同的结果:
int main()
{
int array[3];
int* pArray;
pArray = array;
}
当访问者从其自己的类的成员变量返回地址时,这两种方法也有效。
但是为什么在访问嵌套类的成员变量时,我被迫使用第二种方法? 有哪些逻辑阶段使其成为唯一可行的方法?
答案 0 :(得分:0)
但是为什么在访问嵌套类的成员变量时,我被迫使用第二种方法?
你不是:
return current->array;
和
return &(current->array[0]);
当返回类型为int*
时,两者都做同样的事情。你没有被迫使用第二种方式。
此外,getArray
还有一个错误。如果current
为空,则不返回任何内容。
要迂腐...
显然,唯一的方法是将引用返回到linkedList的成员变量当前指向的节点中数组的第一个元素: return&amp;(current-&gt; array [0]);。
您正在返回地址,即指针。参考意味着别的东西。