|
测试代码:
#include <stdio.h>
#define MIN(x,y) ((x) <= (y) ? (x):(y))
int main ()
{
int i = 10;
int k = 8;
int a[5] = {8,9,11,10,13};
int *p = a;
int j;
j = MIN(*p++, i);
printf("%d\n", j);
printf("%d\n", *p);
return (0);
} 运行与输出:beyes@linux-beyes:~/C/micro> ./micro.exe
9
11 说明:
定义的宏取两数中较小那个。刚开始 *p 的值为 8 。在执行 (*p++) <= (10) 这个判断后,指针+1,指向了 9,所以取得了最小值 9。然而,在取值阶段,也就是 (*p++):(10),指针 p 再加 1,指向了 11。这里的副作用是,本意是想判断数组第一个元素是否为较小者,然后取得其值,但是经过指针的移动后,最后取得的值是数组的第 2 个元素 9 。 |
|