我有一个指向数组的指针数组:
int a1[6] = { 3, 7, 2, 4, 9, 8 };
int a2[6] = { 4, 8, 3, 0, 3, 5 };
int a3[6] = { 1, 7, 2, 3, 9, 2 };
int (*a[3])[6] = { &a1, &a2, &a3 };
以及以下函数,该函数需要“指向数组 [3] 的第一个元素的指针,该指针指向数组 [6]s 的第一个元素”:
void foo(int **pp) {
for (std::size_t i = 0; i < 3; ++i) {
for (std::size_t j = 0; j < 6; ++j) {
std::cout << pp[i][j] << ", ";
}
std::cout << "\n";
}
}
这有效:
int *b[3] = { a1, a2, a3 };
foo(b);
但我找不到将 a
传递给 foo
的方法。
对我来说,将“指向数组的指针数组”转换为“指向单个数组第一个元素的指针数组”似乎很自然。就像数组可以转换为指向其第一个元素的指针一样。
为了支持这个论点,foo(reinterpret_cast<int **>(a))
在我的环境中打印出与 foo(b)
相同的输出。
是否可以仅使用 int (*[3])[6]
将 int *[3]
转换为 static_cast
?
如果不是,标准是否对 foo(reinterpret_cast<int **>(a))
进行了明确定义?