下面给定代码的输出是什么? #包括 int main() { INTA=0,b=1,c=2; *((a+1==1)?&b:&a)=a?b:c; printf(“%d,%d,%d\n”,a,b,c); 返回0; }

下面给定代码的输出是什么? #包括 int main() { INTA=0,b=1,c=2; *((a+1==1)?&b:&a)=a?b:c; printf(“%d,%d,%d\n”,a,b,c); 返回0; },c,pointers,output,operators,C,Pointers,Output,Operators,有人能给我解释一下解决方案和输出吗?您可以将此代码拆分为更长的代码,但可能更可读,如下所示: #include<stdio.h> int main() { int a =0, b=1, c=2; *( ( a+1==1) ? &b : &a) = a ? b : c; printf("%d, %d, %d \n", a , b, c ); return 0; } #包括 int main() { INTA=0

有人能给我解释一下解决方案和输出吗?

您可以将此代码拆分为更长的代码,但可能更可读,如下所示:

#include<stdio.h>

int main()
{
    int a =0, b=1, c=2;

    *( ( a+1==1) ? &b : &a) = a ? b : c;
    printf("%d, %d, %d \n", a , b, c );

    return 0;
}
#包括
int main()
{
INTA=0,b=1,c=2;
int*ptr;
如果(a+1==1){//这将是真的
ptr=&b;
}
否则{
ptr=&a;
}
如果(a!=0){//这将是错误的
*ptr=b;
}
否则{
*ptr=c;
}
printf(“%d,%d,%d\n”a,b,c);
返回0;
}
根据初始值,
a+1==1
将为真,因此
ptr=&b

因为
a=0然后
a!=0将为false,因此
*ptr=c

==>与
b=c相同

因此,预期的输出是

0,2,2


你为什么不自己编译并运行它呢?这是家庭作业吗?@Jabberwocky:自己运行它回答了标题(但前提是假设每个C实现中的输出都与测试的C实现中的输出相同),而不是文章末尾的问题。这样的注释是没有帮助的。请仔细准备粘贴代码。您的编辑软件显然将“和”这样的简单引号转换为“和”这样的花哨引号。这会干扰其他人复制您的代码并将其粘贴到文件中以进行编译和测试。此外,您在
printf
中的格式字符串后漏掉了一个逗号。最好直接从您编译的源文件复制和粘贴代码。是的,谢谢,我没有得到逻辑,但现在已经非常清楚了。
#include<stdio.h>

int main()
{
    int a=0, b=1, c=2;
    int *ptr;

    if (a + 1 == 1) { // this will be true
        ptr = &b;
    }
    else {
        ptr = &a;
    }

    if (a != 0) { // this will be false
        *ptr = b;
    }
    else {
        *ptr = c;
    }

    printf(“%d, %d, %d \n” a , b, c );

    return 0;
}