int main()
{
int value = 4321;
int *ptrVal = &value;
printf("%d %d",++value,(*(int*)ptrVal)--);
return 0;
}
上面的打印语句中的预增量/后增量如何工作?
为什么答案是 4321 4321 ?
最佳答案
您正在两个序列点之间修改对象值
两次:您正在调用未定义的行为。未定义的行为意味着您的程序可能会打印 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);
当然,您不需要任何临时指针来实现此目的。
关于c - printf中的前自增和后自增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17030719/