-5

私が理解している限り、a++ は後置インクリメントであり、a に 1 を追加して元の値を返します。++a はプレフィックスの増分です。広告に 1 を追加すると、新しい値が返されます。

これを試してみたかったのですが、どちらの場合も新しい値を返します。私は何を誤解していますか?

#include <stdio.h>
int main() {
  int a = 0;
  int b = 0;

  printf("%d\n", a); // prints 0
  printf("%d\n", b); // prints 0

  a++; // a++ is known as postfix. Add 1 to a, returns the old value.
  ++b; // ++b is known as prefix. Add 1 to b, returns the new value.

  printf("%d\n", a); // prints 1, should print 0?
  printf("%d\n", b); // prints 1, should print 1

  return 0;
}
4

4 に答える 4

0

Noaも 1 増加します。

次のようなものがある場合

p = a++;

ここ

p = 0

もしあなたが持っているなら

p = ++a;

ここ

p =1

したがって、上記のように変数の値を他の変数に割り当てて、post および pre のインクリメントで何が起こるかをテストできます。

于 2014-12-15T09:47:48.197 に答える
0

プレフィックスインクリメントの場合、++..演算子が評価され、最初にインクリメントが実行され、次にそのインクリメントされた値がオペランドになります。

ポスト インクリメントの場合、..++演算子が評価され、そのオペランドを含む他の評価が終了すると、インクリメントがスケジュールされます。つまり、オペランドの既存の値が他の評価で使用され、値が増加します。

よりよく理解するために、さらに 2 つの変数 と を使用してcd以下のように値を確認します。

#include <stdio.h>
int main() {
  int a = 0;
  int b = 0;
  int c = 0;
  int d = 0;   

  printf("%d\n", a); // prints 0
  printf("%d\n", b); // prints 0

  c = a++; // a++ is known as postfix. Add 1 to a, returns the old value.
  d = ++b; // ++b is known as prefix. Add 1 to b, returns the new value.

  printf("%d\n", a);   // is 1
  printf("%d\n", b);    // is 1
  printf("%d\n", c);    // is 0; --> post-increment
  printf("%d\n", d);    // is 1  --> pre-increment

  return 0;
}
于 2014-12-15T09:49:14.513 に答える
0

C と C++ はやや表現力豊かな言語です。

つまり、ほとんどの式は値を返します。その価値を何もしなければ、時間の砂に埋もれてしまいます。

表現

(a++)

の以前の値を返しaます。前に述べたように、その戻り値がその場で使用されていない場合、それは同じです

(++a)

新しい値を返します。

printf("%d\n", a++); // a's former value
printf("%d\n", ++b); // b's new value

式をそのまま使用しているため、上記のステートメントは期待どおりに機能します。

以下も機能します。

int c = a++;
int d = ++b;

printf("%d\n", c); // a's former value
printf("%d\n", d); // b's new value
于 2014-12-15T09:49:55.607 に答える
0

a増加しますが、古い値を返します。ただし、1 行に 1 つしかないため、結果は無視されます。違いを説明するためにこれを試してください:

#include <stdio.h>
int main() {
  int a = 0;
  int b = 0;

  printf("%d\n", a++);
  printf("%d\n", ++b);

  return 0;
}
于 2014-12-15T09:49:57.100 に答える