今天偶然看到的一道题

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

下面的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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值