c - printf中的前自增和后自增

标签 c pointers printf post-increment pre-increment

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/

相关文章:

我可以在 C 中使用类型转换来获取指向地址的指针的内存大小吗?

c - 结构变量的值是否只是一个地址(就像在数组的情况下)?

c - Sprintf 影响格式化中使用的其他字符串吗?

从内联 ASM (X64) 调用 printf

pointers - 屏蔽原始指针 (Rust)

c - fwrite 非 ASCII 字符

C - 我的程序从文件读取后打印奇怪的东西

c - 如何在没有指数的情况下显示 double ?

c - 段错误 : error code 11

c - 按位运算的整数提升和字节顺序问题