Есть ли разница в использовании прединкрементного и постинкрементного операторов управления повторением? - PullRequest
0 голосов
/ 21 декабря 2018
#include <stdio.h>

int main(void){
  int sum , x;
  x = 1;
  sum = 0;

  while(x <= 10){
    sum = sum + x;
    ++x;
   }

  printf("The sum is: %d\n", sum);
  return 0;
}

Я изучаю C и собираю несколько примеров, используя операторы post-increment и pre-increment.В этом примере вывод равен 55. Когда я использую постинкремент x++;, я также получаю 55. Я действительно ожидал получить другой ответ.Может кто-нибудь объяснить, почему я получаю такой же ответ.и чем этот код отличается от помещения пост / пред приращения выше sum = sum +x; выражения

Ответы [ 5 ]

0 голосов
/ 21 декабря 2018

Оператор предварительного приращения ++x увеличивает значение переменной перед ее использованием в выражении. В операторе пост-приращения x++ значение сначала используется в выражении, а затем увеличивается.если вы хотите увидеть разницу, вы можете попробовать использовать printf() внутри цикла while для ++x и x++

while(x <= 10){
    sum = sum + x;
    printf("The sum is: %d\n", ++x);
}

. Будет напечатано число от 2 до 11

while(x <= 10){
    sum = sum + x;
    printf("The sum is: %d\n", x++);
}

Это будет печататься с 1 до 10

Еще одно различие заключается в приоритетности и ассоциативности.Приоритет постфикс ++ превышает префикс ++.Ассоциативность постфикс ++ слева направо и ассоциативность префикс ++ справа налево.

0 голосов
/ 21 декабря 2018
#include<stdio.h>

int main() {
    int x = 5;
    int y = x++;
    int z = ++x;
    printf("%d, %d, %d\n", x, y, z);
}

возвращает

7, 5, 7

Все они увеличивают x.Разница заключается в возвращаемом значении.

++ x возвращает x до приращения

x ++ возвращает x после приращения

0 голосов
/ 21 декабря 2018

В C , если только вы не напишите что-то сложное, например, for ( int i = 1; sum < bound; sum += i++ ).

В C ++ с перегруженными операторами, это может произойти.++instance обычно более эффективен, чем instance++, для которого требуется сделать временную копию.

0 голосов
/ 21 декабря 2018

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++;
0 голосов
/ 21 декабря 2018
sum=sum + ++x; 
sum=sum + x++;

Это то, что вам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...