1

我有这样的代码:

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

我所期待的:

  • 我已经用 3 个项目初始化了指针数组
  • 为 3 个变量分配了一些值
  • 将此变量的地址分配给指针数组项
  • 现在我期待:*x[0] = 10, *x[1] = 20, *x[2] = 30,但正如您从示例中看到的那样*x[0] == 32767。为什么?
4

2 回答 2

5
int *x[2];

声明一个包含 2 个指针的数组。此数组的有效索引为 [0..1]。线

x[2] = &var2;

写入超出数组末尾。这有未定义的后果,但听起来&var0 == x[2]你正在覆盖var0,将其设置为var2's 地址。

如果要分配 3 个指针值,则需要一个包含三个元素的数组 -int *x[3];

于 2013-05-31T21:15:47.607 回答
2

您已经创建了一个包含 2 个元素的数组,但是您正在写入 3 个元素 - 这对您的问题没有帮助

于 2013-05-31T21:15:38.177 回答