分析:#define可以简单的理解为字符串替换!
这里你用*p++代替A,b代替B,代入MIN宏:
((*p++)<=(b)?(*p++):(b))
--------
剩下的工作自己分析啦!
编译错误...
是不是写错了
//#define(A,B)
((A)<=(b)?(A):(B))
#define
MIN(A,B)
((A)<=(b)?(A):(B))//这样的?
-------------
换后
是
((*p++)<=(b)?
(*p++):(b))
比较*p和b,然后p指向后一个元素
如果真,显示*p,
p在指向后一个元素
假的话,
只显示b
如果宏确实是这样定义的:#define
MIN(A,B)
((A)<=(b)?(A):(B))
那么least
=
MIN((*p)++,
b);
当*p
=
5,
b
=
5的时候,这个MIN宏会得到6。
本来这个宏是用来求两个值中的较小的一个值,但是同时又要计算的时候(*p)++,就会出现严重的错误。
#include
#define
MIN(A,B)
((A)<=(b)?(A):(B))
int
main()
{
int
a
=
5,
b
=
5;
int
*p
=
&a;
printf("%d\n",
MIN((*p)++,
b));
return
0;
}
编译错误...
是不是写错了
//#define(A,B) ((A)<=(b)?(A):(B))
#define MIN(A,B) ((A)<=(b)?(A):(B))//这样的?
-------------
换后 是 ((*p++)<=(b)? (*p++):(b))
比较*p和b,然后p指向后一个元素
如果真,显示*p, p在指向后一个元素
假的话, 只显示b
是用来求两个值中的较小的一个值 ((*p++)<=(b)? (*p++):(b))
比较*p++和b,果真,least = (*p++),假的话, least = b