📜  C |运营商|问题6

📅  最后修改于: 2021-05-26 01:49:32             🧑  作者: Mango

下面程序的输出是什么?

#include 
int foo(int* a, int* b)
{
    int sum = *a + *b;
    *b = *a;
    return *a = sum - *b;
}
int main()
{
    int i = 0, j = 1, k = 2, l;
    l = i++ || foo(&j, &k);
    printf("%d %d %d %d", i, j, k, l);
    return 0;
}

(A) 1 2 1 1
(B) 1 1 2 1
(C) 1 2 2 1
(D) 1 2 2 2答案: (A)
说明:仅当第一个表达式的结果为FALSE时,逻辑或中的控件才会转到第二个表达式。之所以函数foo()是因为i ++在i的值增加到1后返回0(后递增)。foo()函数实际上交换了两个变量的值并返回了第二个参数的值。因此,变量j和k的值被交换并且OR表达式的计算结果为TRUE。
这个问题的测验

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。