免费注册 查看新帖 |

Chinaunix

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

[C] 让人疑惑的C笔试题,求高人解答 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2011-04-12 20:54 |只看该作者
{:3_189:}captivated   骂的好  哈哈

论坛徽章:
0
52 [报告]
发表于 2011-04-12 20:56 |只看该作者
估计面试的也是从网上找的题目,然后在他的tc上试了一下,得1 ,就拿来考人了{:3_189:}

论坛徽章:
0
53 [报告]
发表于 2011-04-13 09:42 |只看该作者
这个题目挺有意思,char p[4]在内存中的存放形式可以是0x01000100,也可以是0x00010001,而*(int *)p可以从前向后取,也可以从后向前取,而且还可以根据编译器定义的int类型的大小来决定取多少个字节。这个真的是:我能,无限可能……

论坛徽章:
0
54 [报告]
发表于 2011-04-13 10:46 |只看该作者
本帖最后由 brantc 于 2011-04-13 10:49 编辑

一看楼主答案,哈哈,我蒙对了
再看回复,发现都说这题有问题。。。

论坛徽章:
0
55 [报告]
发表于 2011-04-13 10:50 |只看该作者
估计面试的也是从网上找的题目,然后在他的tc上试了一下,得1 ,就拿来考人了
thunder_2011 发表于 2011-04-12 20:56



严重同意!
严重鄙视!

论坛徽章:
0
56 [报告]
发表于 2011-04-13 19:02 |只看该作者
难道是 C51? int是两个字节

论坛徽章:
0
57 [报告]
发表于 2011-04-13 21:18 |只看该作者
如果给的答案是1的话,那就是int类型是16位的,
在计算机行业,要一个答案,前提是得把所有的限制条件都写明了,
说清楚在什么样的环境下才行。

论坛徽章:
0
58 [报告]
发表于 2011-04-13 22:05 |只看该作者
char p[4] = {0x01, 00, 0x01, 00}, 则 *(int *)p = ?
     第一个字节的值为10000000  ;
     第二个字节的值为00000000;
     第三个字节的值为10000000;
     第四个字节的值为 00000000;
     p 的值为第一个字节的地址。(int *)p只是将指向char的指针转化为指向int的指针。
    *P的值为第一个字节的值1.

论坛徽章:
0
59 [报告]
发表于 2011-04-13 23:33 |只看该作者
本帖最后由 jwctly 于 2011-04-13 23:38 编辑

是这样的,从低地址到高地址存放的值依次是 0x01,0x00,0x01,0x00,假设 int 为 32位,如果是小端字节序的话,低字节存放在低地址,则*(int *)p = 0x (00) 01 00 01,十进制为65537,如果是大端字节序的话,低字节存放在高地址,则 *(int *)p = 0x 01 00 01 00,化成十进制为 16777472

并不是越界造成的

论坛徽章:
0
60 [报告]
发表于 2011-04-13 23:36 |只看该作者
本帖最后由 jwctly 于 2011-04-13 23:38 编辑

是这样的,从低地址到高地址存放的值依次是 0x01,0x00,0x01,0x00,假设 int 为 32位,如果是小端字节序的话,低字节存放在低地址,则*(int *)p = 0x (00) 01 00 01,十进制为65537,如果是大端字节序的话,低字节存放在高地址,则 *(int *)p = 0x 01 00 01 00,化成十进制为 16777472

并不是越界造成的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP