存在static关键字时出现意外输出

时间:2014-11-28 13:17:02

标签: c static

为什么以下程序会给我一个意想不到的输出。

    static int x[] = {1,2,3,4,5,6,7,8};
    int i;
    for (i = 2; i < 6;++i)
      {

         x[x[i]] = x[i];
      }
        for (i = 0; i < 8;++i)
           {

             printf("%d",x[i]);


           }

      }

我希望它是1,2,3,5,6,7,8,但编译器说:1,2,3,3,5,6,7,8。 顺便问一下static对数组性能的影响是什么?

2 个答案:

答案 0 :(得分:1)

x[x[i]] = x[i];

i =2;

x[2] = 3;

x[3] = x[2];

x[3] = 3;

所以你看到了这个输出。你在内循环中递增i,所以你会看到外循环只执行一次。

答案 1 :(得分:0)

你正在写x [x [i]] = x [i],这是错误的

因为在开始时i = 2意味着它指的是x [2] = 3

所以这里x [x [i]]意味着x [3]你用x [2]代替那就是为什么3会来两次

和4被3替换。

正确:

x [x [i-1]] = x [i]

现在尝试....