今天偶然看到的一道题

来源:互联网 发布:淘宝卖家服务电话 编辑:程序博客网 时间:2024/06/10 05:54

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

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

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

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

原创粉丝点击