如果我创建一个二维指针数组并将其传递给一个函数:
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)。
非常感谢帮助。谢谢。
void test(int const * const array[2][2])
衰减为:
void test(int const * const (* array)[2])
它可以是 const:
void test(int const * const (* const array)[2])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)