C语言的几道填空题给详细说明

来源:百度知道 编辑:UC知道 时间:2024/06/02 00:10:28
1:表达式 1<0<5 的值是______。
2:表达式 ~(10>>1^ ~5) 的值是______。
3:下列程序段的输出结果是______。
int a=1;
long b=a*0x12345678;
printf("%x\n", b);
4:下列程序段的输出结果是_____。
#define T 10
#define MD 3*T
printf("%d", 30/MD);

5:下列程序的输出结果是_____。
# include <stdio.h>
char * f(char *str)
{ return str="fun";
}
void main( )
{ char *str="one";
printf("%s, %c\n", f(str)+1, *f(str)+1);
}
6: 用typedef定义一个指向函数的指针类型FP,该函数的返回值为整型。
 
我有答案的!我想知道理由,有些符号内容我还没学到,你就直接解释你的想法好的了,不用接受符号意思!
int a=1;
long b=a*0x12345678
中的b=a*0x12345678 是什么意思?
答案是typedef int (*FP)();怎么那么多刮号啊???你的又是什么意思?typedef int (*pFunc)() FP;虚心请教!!!

1. 运算符左到右 1<0<5 ==> ((1<0)<5) (1<0)返回假,即0 ;(0<5)为真
2. ~(10>>(1^ (~5))) 1^ (~5)=-5 10>>-5肯定为0
~(10>>1^ ~5)=-1
3. 12345678 如果你用的编译器的int是俩位的话结果会是5678 %x打印整形改为%lx就能打印long型了
4. 100 宏是替代的 30/MD ==》30/3*T ==》 30/3*10=100
5. f(str)+1 str地址对应的内容在子函数中给修改了 str = "fun" f(str)+1 表示str+1是str字符串首地址加一 "un"
*f(str)+1==>(*f(str))+1 将str地址里的第一个字符加一 'f'+1='g';
结果是 un g
6 typedef int (*PF)();

1. 1(或TRUE) (1<0)返回假,即0 ;0<5为真
2. 这题不现实,没有回答必要.我说说原理
~是取反,取反是有分位长的.对字节取反,对字取反,对双字取反,值都不同.
所以这一题没有做的必要.
而且取反后,值变的极大(无符号),右移的结果为0.

3. 12345678
4 100. 30/MD宏展开为:30/3*10
5 没有输出,程序错误 return str="fun";这句赋值没有通过!!
6.typedef int FP;