我对下面代码的理解是,ip
在第二个printf
语句中递增;然后,检索*ip
指向的值。但输出显示并非如此。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i[2] = { 1, 4 };
int *ip;
ip = i;
printf("%d\n", *ip);
printf("%d\n", *(ip++));
printf("%d\n", *ip);
return 0;
}
输出:
1
1
4
然后,通过更改为预自增运算符++ip
,出现了预期的结果。
预自增代码
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i[2] = { 1, 4 };
int *ip;
ip = i;
printf("%d\n", *ip);
printf("%d\n", *(++ip));
printf("%d\n", *ip);
return 0;
}
输出:
1
4
4
我对 C 中运算符优先级的理解是 ()
比 *
运算符具有更高的优先级。话虽如此,为什么后置增量运算符 ip++
没有首先求值 - 因为它位于 ()
内。
最佳答案
无论计算顺序如何,++ip
在返回 ip 的新值之前递增,而 ip++
返回 ip 的旧值,然后递增它。 (或者,如果您愿意,可以保存旧值,增加 ip,然后返回旧值。)
这就是增量前和增量后的区别。
在您的两个示例中,括号都是多余的。
关于c - 括号内的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34973030/