x++
и ++x
оба добавляют 1
к x
.Единственная разница между ними заключается в значении самого выражения, например, если вы делаете:
y1 = x++;
или
y2 = ++x;
y1
получит old значение x
, тогда как y2
получит новое значение x
.См. В чем разница между i ++ и ++ i? .
Поскольку вы не присваиваете результат выражения чему-либо, разница в вашей программе не имеет значения.Если бы вы написали:
sum = sum + ++x;
, вы бы получили результат, отличный от
sum = sum + x++;
, поскольку теперь вы используете значение выражения, и результат имеет значение.
По второму вопросу выписки выполняются по порядку.Поэтому, если вы поставите ++x;
перед назначением, то вы добавите увеличенные значения от x
до sum
вместо исходных значений.Вместо добавления 1
, 2
, 3
, ... 10
, вы добавите 2
, 3
, 4
, ..., 11
.Вы можете увидеть эту разницу, если поставить:
printf("Adding %d + %d\n", sum, x);
перед присваиванием.
Помещение оператора приращения до или после присваивания аналогично использованию выражения приращения в самом присваивании, ивыбирая между преинкрементом и постинкрементом.Т.е.
++x; // or x++;
sum = sum + x;
совпадает с
sum = sum + ++x;
И наоборот,
sum = sum + x;
++x; // or x++;
совпадает с
sum = sum + x++;