笔试题
用宏定义一个求两个数最小值的函数,这个我写出来了
#define MIN(A,B) ((A)>(B))?B:A
下面这个问题就不知道了:
如果list = MIN(*p++,b);这样会发生什么问题?
忘大家指教。
[解决办法]
#define MIN(A,B) ((A)>(B))?B:A
list = MIN(*p++,b);
宏展开:
list = ((*p++)>(b))?b,*p++;
一个运算表达式出现了对同一个变量p两次自增操作.
这个依赖于编译器的实现了.
如*p=1, b=2, *(p+1)=3;
*p++>b为假,
如果p自加*p=3.
list取*p的值3.然后p自加.
如果p不自加*p=1.
list取*p的值1.然后p自加两次.