求助 (short*)NULL + 10 = ?
(short*)NULL + 10 = ?
1,NULL,一般来说,都是这么定义的,#define NULL 0,也就是说NULL就是0
2、(short*),这个是强制类型转换,结果就是把0转换成了一个指针,而且是short型的指针
3、指针的加法,比如这两句int *p;p++;我们都知道p的值实际上增加了sizeof(int),回到这道题,既然(short*)NULL是指针,那(short*)NULL+10就等于(short*)NULL+10*sizeof(short)
4、这样结果就出来了,NULL=0不用管了,那结果就是10*sizeof(short)
不得不说这道题出的很有意思
补一句
经过强制类型转换是不会改变原来的地址的.
NULL 是个指针,其地址就是0,被强制转换为short*,再移动10*(sizeof(short))个单位
所以得到的地址是20.
这道题出得很高明
6楼说的不太严密,
NULL本来不是指针,而是define定义的,属于编译预处理,编译的时候就会直接替换成0,这道题其实直接写(short*)0+10也是一样的。
NULL的地址在哪我不大清楚,应该不是0,不过NULL的值是0,被强制转换成指针后,他的值还是0(当然,他的地址也没变),指针的值也就是指针指向的地址
[此贴子已经被作者于2007-10-19 22:24:16编辑过]