-2

在 C 中,为什么下面的结果 x[1] 为 2?

int a = 2, x;
...
printf("x[1] = ", &x[1])
4

1 回答 1

1

它没有。它会导致任何可能发生的未定义行为。您不能以定义的方式访问数组末尾之外的元素。

最有可能发生的是它a只是x在堆栈上的“上方”,这导致与x[1]具有相同的地址a,但这绝不是保证。

当然,这是假设您printf的错字。就目前而言,它甚至无法编译。我假设这是一个错字,因为问题标题只是询问价值x[1]而不是输出。

为了让它工作,你必须使用类似的东西:

printf ("x[1] = %d\n", (&x)[1]);

它也可以在我的系统上打印2,但在其他地方可能会做一些完全不同的事情。

于 2012-11-03T02:58:00.863 回答