我有以下代码:
#include <stdio.h>
#define MIN(x, y) ((x) <= (y) ? (x) : (y))
int main ()
{
int x=5, y=0, least;
int *p;
p = &y;
least = MIN((*p)++, x);
printf("y=%d", y);
printf("\nleast=%d", least);
return 0;
}
我希望得到以下结果:
y=1
least=1
而是y=2
。
有人可以解释为什么y
现在是2
而不是1
。我想这是因为一些双增量,但我不明白它背后的机制。
感谢。
答案 0 :(得分:1)
预处理器宏通过文本替换工作。所以你的行:
least = MIN((*p)++, x);
扩展到
least = (((*p)++) <= (x) ? ((*p)++) : (x));
双增量很明显。
答案 1 :(得分:0)
这是因为你使用的是宏。由于您正在通过宏传递解除引用的指针加上增量,因此宏将取消引用的指针和增量操作放在宏中显示的每个位置。由于y在宏中显示两次,因此增量运算符会发生两次。
如果在调用宏之前进行增量,则y应该只为1。