今天偶然看到一位仁兄发的帖子说考遍东北三省没人作出来,我觉得很有意思便贴
下面的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 ;
}
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
这题目挺有意思的,拿出来调侃一下^_^
假如招嵌入式的学生还是可以到西南科技大学看看哈,虽然并不是所有人都做的出来,不过肯定有人能作出,呵呵,本人大三还没找工作呢。。。假如来我们学校考这到题就好了^_^