2014-11-28 2 views
-2

Почему следующая программа дает мне неожиданный вывод.Неожиданный вывод в присутствии статического ключевого слова

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,4,5,6,7,8, но компилятор говорит: 1,2,3,3,5,6,7,8. Кстати, каково влияние static на производительность массива?

+2

Пройдите код в отладчике, следя за объявлениями переменных, особенно, что означает 'x [i]'. И помните, что индекс '3' является * четвертой * записью в массиве. –

+1

И чтобы избежать путаницы в будущем коде, когда у вас есть вложенные циклы, не используйте одну и ту же переменную цикла. –

+1

Это точный ожидаемый результат вашей программы, независимо от 'static', это не влияет. –

ответ

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

i =2; 

x[2] = 3; 

x[3] = x[2]; 

x[3] = 3; 

Итак, вы видите это output.You является увеличивающимися i во внутреннем цикле, так что вы увидите внешний контур, выполняющий только один раз.

0

Вы пишете х [х [I]] = х [я], как это его неправильно

, потому что при запуске я = 2 означает, что относятся к х [2] = 3

Так что здесь х [х [I]] означает й [3] замена с й [2] вот почему 3 приходят два временных

и 4 заменяются 3.

Правильно:

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

сейчас попробуйте ....

Смежные вопросы