迭代C中未初始化的数组

时间:2014-09-07 01:31:12

标签: c loops memory stack

所以我前一段时间遇到过这个问题并且无法解决这个问题,但它让我想知道为什么会这样。我不会在我面前提出这个问题,但我会尽力从记忆中重复这个问题。

为什么这两段代码的输出在C中完全相同?其中一个显然是错误的。

代码1:

int main()
{
   int a;
   int b[] = {1,2,3,4};
   for(a = 0; a<4; a++)
      printf("%i\n",b[a]);
   return;
}

代码2:

int main()
{
   int a;
   int b[] = {1,2,3,4};
   for(a = 0; a<4; a++)
      printf("%i\n",a[b]);
   return;
}

两段代码的输出是:

1
2
3
4

有人告诉我它与堆栈和内存位置有关,但解释不够清楚。任何人都可以帮助解释清楚吗?

1 个答案:

答案 0 :(得分:3)

C:

中的简单指针等价
b[a] = *(b + a) = *(a + b) = a[b]

这是一个有用的链接,提供了更深入的解释[pointer tutorial]