printf中的预增量和后增量

时间:2013-06-10 18:48:48

标签: c pointers printf post-increment pre-increment

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

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

为什么回答4321 4321?

2 个答案:

答案 0 :(得分:3)

您正在两个序列点之间修改对象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);

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

答案 1 :(得分:1)

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