引用数组的第二维

时间:2013-03-06 10:14:13

标签: c++ arrays pointers reference

我有这个类和它的对象的二维数组:

class Foo
{
public:
    Foo(int x)
    {
        value = x;
    }
    int value;
};

Foo foo1(1), foo2(2), foo3(3), foo4(4);
Foo* fooArray1[4][2] = { {&foo1, &foo2}, {&foo2, &foo3}, {&foo3, &foo4}, {&foo4, &foo1} };

现在我想引用这个数组的第二个维度。 以某种方式:

Foo* fooArray3[2] = fooArray1[2];

但我的编译器一直告诉我:

Unallowed Assignment »Foo* (*)[2]« to »Foo* [2]«

我开始工作的唯一版本是:

Foo** fooArray2 = fooArray1[3];

但是对于这个版本,我必须使用星号运算符访问fooArray2,我不想这样做:

cout << "fooArray2[0]: " << (*fooArray2)[0].value << " fooArray2[1]: " << (*fooArray2)[1].value << endl;

2 个答案:

答案 0 :(得分:0)

您似乎想要指向数组的指针fooArray1的第二维构成2个元素。有如下特殊语法:

Foo *(*fooArray3)[2] = &fooArray1[2];  // compiles

上面的语法意味着:fooArray3是指向指向2 Foo个元素数组的指针的指针。

但是我相信你可能不会想要这么复杂的语法。您应该使用简单的数据类型或std容器更改您的设计,以便保存数据。

答案 1 :(得分:0)

我认为你想要的是:

Foo* (&fooArray3)[2] = fooArray1[3];
std::cout << fooArray3[0]->value; // Prints 4

如果你正在使用C ++ 11,那么生活会更愉快:

auto& fooArray3 = fooArray1[3];
std::cout << fooArray3[0]->value; // Prints 4

编辑:根据要求:

Foo* (*fooArray3)[2];
⋮
fooArray3 = &fooArray1[3];
std::cout << (*fooArray3[0])->value;