将“指向数组的指针数组”转换为“指向第一个元素的指针数组”

时间:2021-07-05 09:49:36

标签: c++ arrays pointers language-lawyer

我有一个指向数组的指针数组:

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)) 进行了明确定义?

0 个答案:

没有答案