printf中的预增量和后增量

int main() { int value = 4321; int *ptrVal = &value; printf("%d %d",++value,(*(int*)ptrVal)--); return 0; } 

在上面的print语句中,预增量/后增量如何工作?

为什么回答4321 4321?

您正在两个序列点之间修改对象value两次:您正在调用未定义的行为。 未定义的行为意味着您的程序可以打印4321 4321 ,打印42甚至只是崩溃。

您的程序的正确版本将是:

 int value = 4321; int *ptrVal = &value; ++value; (*ptrVal)--; // no need to cast to int * printf("%d %d", value, *ptrVal); // same as printf("%d %d", value, value); 

当然,您不需要任何临时指针来实现此目的。

上面的代码刚刚破解。 没有具体说明它将如何工作或答案是什么。 您需要修改或修改和访问之间的序列点。