尝试将指针的二维数组作为 const 传递时的编译器错误

Compiler error when trying to pass two-dimensional array of pointers as const

提问人:VincentSchaerl 提问时间:3/21/2023 更新时间:3/21/2023 访问量:48

问:

我想将指针的二维数组传递给函数,使函数既不能通过取消引用这些指针来更改数组指针指向的整数值,也不能更改指针本身,也不能使数组本身变为合理(请参阅我的最后一个问题):

void test(int const * const (* const array)[2]) {}

int main()
{
    int* array[2][2];
    test(array);
}

这是行不通的。我在 Windows 上使用 Visual Studio,第 6 行中的函数调用导致生成错误(错误代码 C2664):

'void test(const int *const (*const [2])': 无法将参数 1 从 'int *[2][2]' 转换为 'const int *const (*const )[2]'

奇怪的是,这两个工作得很好:

void test(int const * const (* const array)) {}

int main()
{
    int* array[2];
    test(array);
}
void test(int* const (* const array)[2]) {}

int main()
{
    int* array[2][2];
    test(array);
}

这里有什么问题?

非常感谢帮助。谢谢。

C++ 指针 多维数组 常量 参数传递

评论

0赞 pm100 3/21/2023
二维静态数组 (X[R][C]) 与一维指针数组不同。它们在内存中的布局完全不同。(我知道你有指针数组,但忘记了,它不相关,纯 int 数组也是如此)
2赞 Paul Sanders 3/21/2023
指针地狱!使用会使这更容易std::array

答: 暂无答案