为什么以下程序会给我一个意想不到的输出。
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
对数组性能的影响是什么?
答案 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]
现在尝试....