c真难 发表于 2022-4-15 23:18:53

宏定义和三目运算符

#define MAX(x,y) ((x) > (y)) ? (x) : (y)
main()
{
    int a=5 b=8 c=20;
    printf(‘%d, MAX(a-b) , (b+c) ? (a) : (b));
}
这道题为什么结果是5 ,a-b等于-3,b+c等于28 为什么不是等于后面的8而是前面5 条件不成立应该就是取后面的b不知道为什么取了a的值(这道题就是比谁大)
有大佬能说的详细点吗 实在是不理解

c真难 发表于 2022-4-15 23:19:56

救命啊 这到底是咋回事啊 我百度搜 他们都说条件成立取a 不成立取b 我就是这样想的 但是结果不是这样的

ba21 发表于 2022-4-15 23:20:43

你这代码不是应该报错?运行不了????

c真难 发表于 2022-4-15 23:22:00

ba21 发表于 2022-4-15 23:20
你这代码不是应该报错?运行不了????

这上面打字我偷懒了 代码格式是对的 我少写了个逗号

c真难 发表于 2022-4-15 23:23:19

c真难 发表于 2022-4-15 23:22
这上面打字我偷懒了 代码格式是对的 我少写了个逗号

就我把c这个去掉 就单纯比较a和b大小 a大于b不成立 它取的还是a的值 我不理解啊

lkl3210559278 发表于 2022-4-16 00:18:37

这个代码有问题。
{:10_249:}
MAX函数那里是不是缺东西了

zzxhh628 发表于 2022-4-16 09:40:35

本帖最后由 zzxhh628 于 2022-4-16 09:41 编辑

#define MAX(x,y) ((x) > (y)) ? (x) : (y)

int main()
{
int a=5,b=8,c=20;
    printf("%d\n",(b+c)?(a):(b));
printf("%d\n", MAX(a-b,(b+c)?(a):(b)));
}
(b+c)?(a):(b),b+c的结果是非0值,也就是真,那么这个表达式的值就是a的值(也就是5),然后通过MAX(a-b,(b+c)?(a):(b)),a-b是个负数,肯定没有5大(第二个参数的值),所以最后的值就是5。
页: [1]
查看完整版本: 宏定义和三目运算符