下面程序的输出是什么?
#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基础课程》。