我有这样的代码:
int *x[2];
int var0 = 10;
int var1 = 20;
int var2 = 30;
x[0] = &var0;
x[1] = &var1;
x[2] = &var2;
cout << "var0 is equal to: " << *x[0] << endl;
var0 is equal to: 32767
我期待的是:
*x[0] = 10, *x[1] = 20, *x[2] = 30
,但正如您从示例*x[0] == 32767
中看到的那样。为什么? 答案 0 :(得分:5)
int *x[2];
声明一个包含2个指针的数组。此数组的有效索引为[0..1]。这条线
x[2] = &var2;
写入数组的末尾。这有不确定的后果,但听起来像&var0 == x[2]
,因此您覆盖var0
,将其设置为var2
的地址。
如果要分配3个指针值,则需要一个包含三个元素的数组 - int *x[3];
答案 1 :(得分:2)
你创建了一个包含2个元素的数组,但你写的是3个元素 - 这对你的问题不起作用