指针不是C的预期值

时间:2013-05-31 21:13:26

标签: c++ arrays pointers

我有这样的代码:

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中看到的那样。为什么?

2 个答案:

答案 0 :(得分:5)

int *x[2];

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

x[2] = &var2;

写入数组的末尾。这有不确定的后果,但听起来像&var0 == x[2],因此您覆盖var0,将其设置为var2的地址。

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

答案 1 :(得分:2)

你创建了一个包含2个元素的数组,但你写的是3个元素 - 这对你的问题不起作用