引用数组的第二次元
Referencing to the second dimension of an array
我已经有了这个类和它的对象的二维数组:
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
容器保存数据。
相关文章:
- 如何从给定字符串中删除第二次和第三次出现的$
- getopt_long_only第二次调用时返回 -1
- 读取文件在第二次调用时返回INVALID_HANDLE
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 如何在编译时将齐次元组转换为数组?
- 解释为什么第二次分配会改变性能
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- 如何找到数组中值倒数第二次出现的索引
- arm_data在第二次运行我的程序时中止失败,然后
- Java 套接字读取在第二次读取时返回奇怪字符
- 提升 Asio SSL 无法第二次接收数据(第一次确定)
- CUDA 内核在第二次运行时运行得更快 - 为什么?
- 第二次调用 PyObject_CallObject() 失败
- 第二次运行C++时无法编译
- 第二次创建命令缓冲器时,在VKCMDDrawIndex中进行了segfault
- C++ - 第二次二叉搜索的分段错误
- SQLite C++ 程序值仅在第一次插入第二次不插入
- 排序二维数组不触及第二次元
- 引用数组的第二次元