(22)有以下定义语句,编译时会出现编译错误的是char a='aa'; 这个哪里错了??还有第23题,如下:

(23)有以下程序
#include
main()
{ char c1,c2;
c1='A'+'8'-'4';
c2='A'+'8'-'5';
printf("%c,%d\n",c1,c2);
}
已知字母A的ASCII码为65,程序运行后的输出结果是
E,68 这个为什么第一个是字母,第二个是数字那??请给出详解。
(33)设有以下函数:
void fun(int n,char *s){……}
则下面对函数指针的定义和赋值均正确的是
A)void (*pf)(); pf=fun; B)void *pf(); pf=fun;
C)void *pf(); *pf=fun; D)void (*pf)(int,char);pf=&fun;
答案是A。指针的定义和赋值,有没有简单的记忆方法或如何理解啊?

22. char a='aa'; a是字符变量,只能存储一个字符!

23. %c 打印字符 %d 打印整数,至于是什么值,请对照ASCII表查看!

33. 答案:A。 但楼上解释均有误!
void (*pf)(); 定义函数指针pf,指向返回值为void的函数,参数任意
pf = fun; 正确!
pf = &fun; 正确!C照样认可这种写法,只是不同的观点而已!请参看《C和指针》

void *pf(); 声明pf函数,没有参数,但返回void *类型!只是声明,还没有定义!
另外,pf 本身是地址,不是变量,不可以更改!故pf = fun;错误!

再看这一句
D)void (*pf)(int,char);pf=&fun;
首先声明pf为函数指针,它指向的函数返回void类型,
参数为int和char(不是char *,否则就对了)
而fun的参数2为char *类型,故两者类型不匹配,pf=&fun; 错误!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-22
22 char a='aa'; //字符变量只能存储一个字符,aa是两个字符。
23 printf("%c,%d\n",c1,c2); //c1以%c输出,结果是字符。c2以%d输出,结果是数值。
33 void fun(int n,char *s){……}函数指针的定义就是将fun的位置换成:(*指针名),因此正确答案是D,并不是A。
第2个回答  2012-02-22
1、E,68 这个为什么第一个是字母,第二个是数字那??
因为你的打印输出类型定义不一样 printf("%c,%d\n",c1,c2); 输出两个值:%c意思是输出字符,对应的俄式C1变量,%d意思是输出整数,对应的是C2。

2、A,D中, (*pf)()都是函数指针变量,D不对的原因是 C 语言中函数即是函数的跳转地址,本身就是指针,须直接赋值给函数指针变量,不用再用取地址操作符&;B ,C 中void *pf()意思为P为带回一个指针的函数,即 P是一个函数,所以不能赋值,关于指针定义看书吧,这个树上有的,主要记住操符之间的优先级然后依次结合分析……希望对你有帮助
第3个回答  2012-02-22
得思考