2015-12-12 5 views
0

В следующем цикле перекрытия, как будет оцениваться sum += n --? Я очень, очень смущен ...Порядок операций для петель в C

int sum; 
for(sum=0;n>0;sum+=n--); 
+1

@both выше комментариев: в C есть много конструкций, которые не могут быть обнаружены экспериментом, потому что они не определены. См. Http://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior. – Quentin

+0

Еще раз, остановитесь. письмо. мусор. код. Если это сбивает с толку, почему вы так написали? Почему ты не просто разделил его? –

ответ

5

Для sum += n-- следующие операции выполняются

  • добавить n к sum
  • уменьшаем n

С sum += --n

  • n декрементируется
  • новое значение n добавляется sum

n-- называется postdecrement и --n называется predecrement

3

Это связано с пост- и предопределения операций. Операции предварительного сокращения сначала уменьшают значение, а затем используются в других операциях, в то время как постдекретационные сначала используются в операциях (добавление в случае) и уменьшают значение только после этого.

В общем, порядок будет следующим:

  • sum увеличивается на n
  • n декрементируется
0

очень простой пример, который я хотел бы demostrate. Рассмотрим две переменных a=1 и b=4 Заявления a=b присвоит значение Ь к а,

В заявлении a=b++, первое значение b назначенная a, а затем значение b увеличивается на единице.

Если значение a было 1 и значение b было 4, то после использования a=b++, значение a станет 4, а значение b станет 5.

Заявление a=b++ можно представить в виде

a=b;

затем

b=b+1;

Кроме того, в вашем случае, у вас есть sum+=n--, которые могут быть разбиты, как

sum=sum+(n--)

или

sum=sum+n

затем

n=n-1

Здесь снова, первое значение sum+n будет присвоено sum, то значение n будет уменьшаться на 1

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