引用数组的第二次元

Referencing to the second dimension of an array

本文关键字:二次元 第二次 数组 引用      更新时间:2023-10-16

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

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;

我想你想要的是:

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

EDIT: As requested:

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

似乎您想要指针指向数组fooArray1的第2维由2个元素构成。这里有一个特殊的语法,如下所示:

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

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

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