| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1603 人关注过本帖
标题:[求助]期末模拟题
只看楼主 加入收藏
heaiso1985
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-12-11
收藏
得分:0 
不是吧
不行吗
2007-01-06 23:10
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

我明白了,
printf("%s", &s);
传入s的起始地址给printf()函数,
再从起始地址开始,按每一个字节打印一个字母,
每一个字节存放一个两位的16进制的数,
而在8086系列机上,主存堆栈是向上生长的结构,
所以存放的结构是:
0x79 <---Top
0x70
0x70
0x61
0x68 <---Bottom
打印的时侯就是按字母的ASCII 打印,
但int 类型所占的空间是二个字节
long 类型所占的空间是四个字节,

所以题目得改一下:
#include <stdio.h>

main()
{
struct {long int m; int n;} s = {0x70706168, 0x79};
printf("%s", &s);
}


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-01-07 11:13
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
收藏
得分:0 

1个字节存一个2位的16进制?在所有机器上都是这样的吗?


2007-01-07 11:22
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
一位16进制的数相当于4位二进制的数,
二位16进制的数就相当于8位二进制的数,
一个8位二进制的数就是一个字节了!

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-01-07 11:38
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用neverTheSame在2007-1-7 11:13:31的发言:

我明白了,
printf("%s", &s);
传入s的起始地址给printf()函数,
再从起始地址开始,按每一个字节打印一个字母,
每一个字节存放一个两位的16进制的数,
而在8086系列机上,主存堆栈是向上生长的结构,
所以存放的结构是:
0x79 <---Top
0x70
0x70
0x61
0x68 <---Bottom
打印的时侯就是按字母的ASCII 打印,
但int 类型所占的空间是二个字节
long 类型所占的空间是四个字节,

所以题目得改一下:
#include <stdio.h>

main()
{
struct {long int m; int n;} s = {0x70706168, 0x79};
printf("%s", &s);
}

还要注意字符串的输出%s,是一直打印到第一个'\0'出现。
依样画葫芦再想想这个'\0'出现的原因就解释全了。
另;int在很多编译器上都是4个字节,我见过的好象就tc内核的是2个字节。


对不礼貌的女生收钱......
2007-01-07 13:25
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

#include <stdio.h>

int main()
{
struct {int m; int n;} s = {0x70706168, 0x79};
printf("%s", &(s.m));

return 0;
}
呵呵!这个结果是一样的!也要像那样解释吗?


该学习了。。。
2007-01-07 13:59
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
%s要一直打印到遇到'\0'才结束。
s = {0x70706168, 0x0079};便是这'\0'.

对不礼貌的女生收钱......
2007-01-07 14:04
神秘失恋
Rank: 1
等 级:新手上路
帖 子:663
专家分:0
注 册:2007-1-6
收藏
得分:0 
m,n 在这起个什么作用?

指教....

上帝之手.........
2007-01-07 14:09
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
呵呵!意思就是打印m之后没有停止,接着打印n,直到遇到00为止,呵呵,谢谢师兄了!

该学习了。。。
2007-01-07 14:09
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

楼上说得对。


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-01-07 14:11
快速回复:[求助]期末模拟题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016695 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved