求解:07年4月2级C语言填空17题

[复制链接]
查看11 | 回复3 | 2009-3-19 00:50:09 | 显示全部楼层 |阅读模式
请问为什么答案是40?15和20是怎么占用储存单元的?因为sizeof(char)所以malloc申请的空间应该只能占一个字符啊?
17)以下程序的输出结果是
40

# include

main()

{char *s1,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*s1=15;

*s2=20;

m=*s1+*s2;

printf(“%d\n”,m);

}
malloc一块size为sizeof(char)的内存空间,占用多少字节?能装下两位数么?

回复

使用道具 举报

千问 | 2009-3-19 00:50:09 | 显示全部楼层
既简洁又清晰的分析: 由s1=s2=(char*)malloc(sizeof(char)); 语句可知s1,s2指向同一地址,赋值语句 *s1=15; *s2=20; 都被赋值在同一内存地址中,所以*s2的值将覆盖住*s1的值,即*s1=20;所以 m=*s1+*s2=20+20=40; 你不妨将*s1=15; *s2=20;语句顺序对调一下,其输出结果应为30。 malloc一块size为sizeof(char)的内存占一个字节,也即八个比特,所以整型值赋给字符类型时在内存中是以二进制形式存储的,只对其低八位字节参与处理。所以不仅可以装两位数,3,4,5,6。。位都能装,不过只是对其二进制的低八位参与处理。...
回复

使用道具 举报

千问 | 2009-3-19 00:50:09 | 显示全部楼层
======================================问题补充:malloc一块size为sizeof(char)的内存空间,占用多少字节?能装下两位数么?======================================char占1个字节,也就是8位,所以取值范围为-128~127,所以放下两位数没有任何问题...
回复

使用道具 举报

千问 | 2009-3-19 00:50:09 | 显示全部楼层
s1=s2=(char*)malloc(sizeof(char));使指针s1和s2同时指向一个开辟的字节存储空间,*s1=15; *s2=20;先后对这个字节空间赋值,则赋值结束时,空间内数值为20,所以相加为40...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行