提问人:VincentSchaerl 提问时间:3/21/2023 最后编辑:VincentSchaerl 更新时间:3/21/2023 访问量:100
如何将指针的二维数组作为常量传递?
How to pass a two-dimensional array of pointers as const?
问:
如果我创建一个指针的二维数组并将其传递给一个函数:
int main()
{
int* array[2][2];
int a = 5;
int b = 10;
array[0][0] = &a;
array[1][1] = &b;
test(array);
}
如何定义此函数,以便以下 3 个语句都不可行?
void test(int* array[2][2])
{
int c = 20;
// statement 1:
*(array[0][0]) = c;
// statement 2:
array[1][1] = &c;
// statement 3:
int* array2[2][2];
array = array2;
}
我试过了这个:
void test(int const * const array[2][2])
{
int c = 20;
// statement 1:
*(array[0][0]) = c; // is no longer possible
// statement 2:
array[1][1] = &c; // is no longer possible
// statement 3:
int* array2[2][2];
array = array2; // is still possible
}
由于 const 从右到左工作,因此第一个 const 禁止通过取消引用这些指针来更改数组指针指向的 int 值(语句 1),第二个 const 禁止更改指针本身(语句 2)。
但是我无法找到如何使数组本身保持常量,因此名为“array”的变量,在我的理解中是指向数组第一个元素的指针,不能更改为指向另一个第一个元素/数组(语句 3)。
非常感谢帮助。谢谢。
答:
4赞
Mark Tolonen
3/21/2023
#1
void test(int const * const array[2][2])
衰减为:
void test(int const * const (* array)[2])
这可以是 const:
void test(int const * const (* const array)[2])
评论
std::数组
?std::array
std::array
struct Array2x2{ int array[2][2]; };