今天偶然看到的一道题

今天偶然看到一位仁兄发的帖子说考遍东北三省没人作出来,我觉得很有意思便贴

下面的C代码在VC++6.0下的运行结果是什么?请详细说明原因。 
 

#include   <stdio.h> 
int   main() 

    
int   a[5]={1,2,3,4,5}; 
    
int   *ptr1=(int   *)(&a+1); 
    
int   *ptr2=(int   *)((int   )a+1);  
    printf(
"%x,%x",ptr1[-1],*ptr2); 
    
return   0
}  

其中第一个是&a+1的问题,很明显可以看出ptr1[-1]的答案是5就不说了

第二个*ptr2的题目很有意思有个对其的问题

0x00000001和0x00000002在内存中的排列是这样的

0x01000000和0x20000000

两个排在一起就变成了0x0100000020000000

于是(int)a+1的指针指的位置在内存中就是0x00000020于是转化成我们熟悉的数字就是0x20000000

这题目挺有意思的,拿出来调侃一下^_^

假如招嵌入式的学生还是可以到西南科技大学看看哈,虽然并不是所有人都做的出来,不过肯定有人能作出,呵呵,本人大三还没找工作呢。。。假如来我们学校考这到题就好了^_^

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值