解析
第一题:
//What is the output of this C code?
#include <stdio.h>
int main()
{
int x = 2, y = 2;
float f = y + x /= x / y;
printf("%d %f\n", x, f);
return 0;
}
lvalue required as left operand of assignment,即是说\=的左边不能是表达式,不然会报compile time error
第五题:
//What is the output of this C code?
#include <stdio.h>
int main()
{
int x = 3, y = 2;
int z = x << 1 > 5;
printf("%d\n", z);
}
首先计算x<<1,即等于x*2=6,在计算是否大于5,明显6>5,则z=1.
第六题:
//What is the output of this C code?
#include <stdio.h>
int main()
{
int x = 3; //, y = 2;
const int *p = &x;
*p++;
printf("%d\n", *p);
}
由于*的优先级低于++,所以*p++实际上*(p++),相当于x地址的下一位,输出的是garbage value。