printf中的优先级似乎发生了变化

precedence seems to change in printf

本文关键字:发生了 变化 优先级 printf      更新时间:2023-10-16

假设您有一个int指针变量int* q = malloc(sizeof(int))

现在做这个

*q++;

由于++具有优先权,q将指向某个其他存储器位置

然而在printf 中也这样做

printf("%d",*q++);

赋予取消引用(*)运算符优先级??

++是后缀增量。它的优先级高于一元*。然而,更新变量的副作用是在变量评估(6.5.2.4)之后完成的:

结果的值计算在边之前排序更新操作数的存储值的效果。

因此,*q++将始终为您提供*q的值,无论它在代码中的哪个位置使用。

这就是前缀和后缀增量之间的区别。*++q会先增加指针,然后计算新地址的值。

有两个为增量定义的运算符-增量前和增量后-它们都返回一个值!就好像你调用了一个函数:

printf("%d", *f(q));

预增量运算符首先递增并返回新值,后增量运算符返回值,然后递增

好吧,这只是为了说明——当然,从技术上讲,它不能在返回后递增,所以它会记住初始值,然后递增并返回记住的值。顺便说一句,这就是为什么预增量比后增量更有效的原因,除非编译器优化差异。。。