В следующем цикле перекрытия, как будет оцениваться sum += n --
? Я очень, очень смущен ...Порядок операций для петель в C
int sum;
for(sum=0;n>0;sum+=n--);
В следующем цикле перекрытия, как будет оцениваться sum += n --
? Я очень, очень смущен ...Порядок операций для петель в C
int sum;
for(sum=0;n>0;sum+=n--);
Для sum += n--
следующие операции выполняются
n
к sum
n
С sum += --n
n
декрементируетсяn
добавляется sum
n--
называется postdecrement и --n
называется predecrement
Это связано с пост- и предопределения операций. Операции предварительного сокращения сначала уменьшают значение, а затем используются в других операциях, в то время как постдекретационные сначала используются в операциях (добавление в случае) и уменьшают значение только после этого.
В общем, порядок будет следующим:
sum
увеличивается на n
n
декрементируетсяочень простой пример, который я хотел бы 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
@both выше комментариев: в C есть много конструкций, которые не могут быть обнаружены экспериментом, потому что они не определены. См. Http://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior. – Quentin
Еще раз, остановитесь. письмо. мусор. код. Если это сбивает с толку, почему вы так написали? Почему ты не просто разделил его? –