-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

请记住,C 和 C++ 是一些表达能力强的语言。

这意味着大多数表达式都会返回一个值。如果你不利用这个价值做任何事情,它就会被时间的沙子淹没。

表达方式

(a++)

将返回a's 以前的值。如前所述,如果它的返回值没有被立即使用,那么它与

(++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增加,但它返回旧值。但由于它单独在一条线上,所以结果被忽略了。试试这个来说明差异:

#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 回答
0

Noa也加 1。

如果你有类似的东西

p = a++;

这里

p = 0

如果你有

p = ++a;

这里

p =1

因此,您可以将变量的值分配给其他变量,如上所示,并测试后增量和预增量会发生什么。

于 2014-12-15T09:47:48.197 回答
0

在前缀增量的情况下,++..首先计算运算符并执行增量,然后该增量值成为操作数。

在后增量的情况下,..++一旦包括该操作数在内的其他评估完成,就会评估运算符并安排增量。这意味着,操作数的现有值用于其他评估,然后增加该值。

为了更好地理解它,请使用另外两个变量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 回答