鱼C论坛

 找回密码
 立即注册
查看: 13458|回复: 117

[技术交流] 看看这个小程序(考验你指针能力的时候了,挺有意思的)

  [复制链接]
发表于 2012-5-22 21:36:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 楚门 于 2012-5-22 22:19 编辑

废话少说,源码奉上
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     int a[5]={1,2,3,4,5};
  5.     int *ptr1=(int *)(&a+1);
  6.     int *ptr2=(int *)((int)a+1);
  7.    
  8.     printf("%x,%x",ptr1[-1],*ptr2);
  9.    
  10.     return 0;
  11. }
复制代码

请问输出是什么?大家先自己想想,答案先隐藏了
(注:这题答案对内存存储数据的方式(即大端模式和小端模式)不同而不同,这里给出的是小端模式的答案)
游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 1鱼币 +10 贡献 +5 收起 理由
小甲鱼 + 10 + 5 支持这种形式的学习方案!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-22 21:53:57 | 显示全部楼层
猜猜,是1,2么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-22 21:55:08 | 显示全部楼层
凌乱了:Q  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-22 21:55:12 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-22 22:03:47 | 显示全部楼层
12121212121212121212121212

评分

参与人数 1鱼币 -1 收起 理由
牡丹花下死做鬼 -1 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-22 22:11:51 | 显示全部楼层
本帖最后由 Near 于 2012-5-22 22:24 编辑

输出是5,2000000
第一个是先将a[5](假如有的话)的地址赋给ptr1,最后再使ptr-1,得到a[4]的地址,输出就是5

第二个比较有意思,通过(int)a+1将a的地址变成整型后加1,即[a+1]。然后在转换成(int *)型的地址传递给ptr2

因为int型是占四个字节,而且x86cpu默认为小端存储,则实际存储形式是01 00 00 00 02 00 00 00 03 00 00.....a[0]的地址是01的地址,所以取值为00 00 00 01 。同理,ptr2的地址是01后的00那个地址,则其取值为02 00 00 00,所以打出的值就是2000000了

评分

参与人数 3鱼币 +11 贡献 +5 收起 理由
czfengyong + 5 希望论坛里这样有水准的回答越来越多,赞一个.
洗脚水煮饺子 + 5 + 5
楚门 + 1 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-22 22:29:34 | 显示全部楼层
Near 发表于 2012-5-22 22:11
输出是5,2000000
第一个是先将a[5](假如有的话)的地址赋给ptr1,最后再使ptr-1,得到a[4]的地址,输出就 ...

嘻嘻,bingo!!!赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-22 22:32:01 | 显示全部楼层
楚门 发表于 2012-5-22 22:29
嘻嘻,bingo!!!赞一个

嘿嘿{:2_31:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-22 22:40:56 | 显示全部楼层
为什么是这个结果额
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-22 22:44:02 | 显示全部楼层
mx__sword 发表于 2012-5-22 22:40
为什么是这个结果额

看看6楼的解释:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 01:43:15 | 显示全部楼层
我完全没看出来....................................:funk:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 09:23:21 | 显示全部楼层
看答案存储数据的方式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 09:54:28 | 显示全部楼层
我是VIP了木有??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 09:57:09 | 显示全部楼层
好吧,我指针真不咋地:'(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 10:01:16 | 显示全部楼层
第一个还行,话说神马事小端大端。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 10:34:57 | 显示全部楼层
来看看答案呢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 10:55:48 | 显示全部楼层
感谢小甲鱼
:o本贴由隐藏贴回复机快速回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 11:00:48 | 显示全部楼层
5,2000000
看看对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 13:24:35 | 显示全部楼层
...................................................................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-23 13:25:57 | 显示全部楼层
比试我是菜鸟,看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表