?Cにおけるオペレータの作業:どのように正確ですか?

N00B:

私は、コンパイラは次のコードでどのように動作するか、疑問を持っています:

#include<stdio.h>

int main(void)
{
  int b=12, c=11;
  int d = (b == c++) ? (c+1) : (c-1);
  printf("d = %i\n", d);
}

私は結果がある理由はわかりませんd = 11

エリックPostpischil:

int d = (b == c++) ? (c+1) : (c-1);

  • 値はc++現在の値でありc、11とは別に、c12にインクリメントされます。
  • b == 11以来、虚偽であるb12です。
  • 以来(b == c++)falseで、(c-1)使用されています。また、増分のc12には、この時点で完了しなければなりません。
  • 以来c12は、c-111です。
  • d その値、11に初期化されます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=33599&siteId=1