考考你们的C语言功底

1.为什么下面的代码会返回0?

 int x;
 return x == (1 && x);


2.为什么下面的代码会返回0而不是-1?

return ((1 - sizeof(int)) >> 32);

3.函数和函数指针可以相互转换。下面的语句哪些是合法的?

int (*pf)(void);
int f(void)
{

   pf = &f; // 没问题
   pf = ***f; // 取址?
   pf(); // 函数指针可以调用?
   (****pf)();  // 这又是什么?
   (***************f)(); // 这个够变态了吧?
}

收集于互联网陈皓博客,C语言挺好玩的!

第一段x没有赋值,那么x会是个随机值,1 && x是个逻辑表达式,结果只会是0或1,自然与随机的x值相等的概率很低,那么逻辑表达式==的结果就是0
第二段无论前面相减结果是多少,>>32就是右移32位,那么整型值所有位都被清空了,补充填入的全是0,结果自然就是0

第1题:如果x的值为0或1,则返回1;如果x值为其他非0,则返回0。
第2题:返回的是-1,因为1-sizeof(int) = -3 ,-3>>32 == -1
第3题:代码有点问题,怎么在 f()里面就用函数指针指向f()了呢。&f,f,*f这都是一样的,所以说怎么写都可以调用