Sumer Lochab Ответов: 3

Объясните логику вывода на языке Си


#include;
main( )
{
 int x = 4, y, z ;
 y = --x ;
 z = x-- ;
 printf ( "\n%d %d %d", x, y, z ) ;
return 0;
}


OUTPUT 2 3 3


Что я уже пробовал:

Логика вывода на языке Си ?

3 Ответов

Рейтинг:
2

Patrice T

Ваш код означает::

#include;
main( )
{
  int x = 4, y, z ;
  --x ;
  y = x ;
  z = x ;
  x-- ;
  printf ( "\n%d %d %d", x, y, z ) ;
  return 0;
}

таким образом, результат.


Рейтинг:
0

Maciej Los

5ed!

Рейтинг:
0

W∴ Balboos, GHB

Я объясню вам ваш конкретный случай, но не забудьте изучить его непосредственно, пока вы действительно не поймете его. Не понимать этого-значит настраивать себя на проблемы в C, C++, C# и других языках.

Когда у вас есть операция предварительного декремента, она говорит компилятору сделать вычитание, прежде чем он использует это значение.
Когда у вас есть операция пост-декремента, она говорит компилятору использовать значение, а затем декрементировать его.

Когда Вы наконец достигнете printf(), все декременты будут выполнены.

Если вы перепишете это, печатая их значение после каждой операции (не забудьте инициализировать y &z !), вы увидите, как это влияет на X.

Что-нибудь неожиданное? Проанализируйте его с точки зрения того, когда происходит операция, пока вы ее не увидите.
Если вы используете эти операторы в макросе, имейте в виду, что если он появляется несколько раз, то будет выполняться несколько раз. Есть подобные ловушки, о которых вы должны узнать.