免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sky_terry
打印 上一主题 下一主题

今天笔试的一题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-10-26 17:32 |只看该作者

今天笔试的一题

[quote]原帖由 "mik"][/quote 发表:


领悟精神,领悟精神~~   

论坛徽章:
0
12 [报告]
发表于 2005-10-26 20:16 |只看该作者

今天笔试的一题

原帖由 "mik" 发表:

leal 16(%eax), %eax          // p = p+ 4*sizeof(int);
错了吧??!

论坛徽章:
0
13 [报告]
发表于 2005-10-26 20:17 |只看该作者

今天笔试的一题

[quote]原帖由 "kj501"]错了吧??![/quote 发表:



怎么个错法?

论坛徽章:
0
14 [报告]
发表于 2005-10-26 20:22 |只看该作者

今天笔试的一题

原帖由 "mik" 发表:



怎么个错法?



没错

论坛徽章:
0
15 [报告]
发表于 2005-10-26 20:42 |只看该作者

今天笔试的一题

原帖由 "mik" 发表:



怎么个错法?
p是指向整型的指针, 在32位体系结构上, int类型应该是4个字节. p = p + 4*sizeof(int)(实际上是p = p + 16)的计算结果应该是指针p移动16*sizeof(int)=64个字节. 用汇编表示就应该是leal 64(%eax), %eax.
你再检查一下你的汇编代码. 在我的机器上addl $64, (%eax)的.

论坛徽章:
0
16 [报告]
发表于 2005-10-26 20:46 |只看该作者

今天笔试的一题

[quote]原帖由 "kj501"]p是指向整型的指针, 在32位体系结构上, p = p + 4*sizeof(int)(实际上是p = p + 16)的计算结果应该是指针p移动16*sizeof(int)=64个字节. 用汇编表示就应该是leal 64(%eax), %eax.[/quote 发表:



晕倒.........................

你简直是误导人家.....

在机器中,内存单元是以 bytes 为单位存取的 !!!!

一个 int 引用 4 个 bytes 单元.

你自己计算吧

论坛徽章:
0
17 [报告]
发表于 2005-10-26 20:50 |只看该作者

今天笔试的一题

内存单元本来就是以字节为单位存取的. 和这个有什么关系?

论坛徽章:
0
18 [报告]
发表于 2005-10-26 21:27 |只看该作者

今天笔试的一题

to mik:
我还是坚持我的意见.
能不能把你完整的汇编代码贴出来看看?

论坛徽章:
0
19 [报告]
发表于 2005-10-26 22:00 |只看该作者

今天笔试的一题

原帖由 "kj501" 发表:
to mik:
我还是坚持我的意见.
能不能把你完整的汇编代码贴出来看看?

我赞成你的观点。

论坛徽章:
0
20 [报告]
发表于 2005-10-26 23:02 |只看该作者

今天笔试的一题

#include <stdio.h>;

int main()
{
int a[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19},*p;
p=a;
printf("%d\n",*(p+4*sizeof(int)));
return 0;
}

楼主把预定义数组扩大为20个元素,再运行一下,立刻就能发现问题所在了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP