分类: C/C++
2008-11-07 10:27:51
|
上面就是代码,问题是 1,2 两种不同的赋值办法,得到的 指针地址 addr 分别是多少?1和2的分别就是查了一个括号,那么C究竟是怎么处理的呢?开ADS编译运行了一下得到的答案是 : 1得到的地址是 0x30000001 ,2得到的地址是 0x30000002 。这里延伸出一个问题。记得以前看过一些C的面试题目,出现过类似的问题,关键是编译器是怎么判断的。
1中,加了括号,那么整个地址是先计算出来,传入的x=1 y=0很显然计算结果是0x30000001然后再做强制数据类型转换,变成16位指针地址。
而2当中,是先做了强制类型转换,那么后面计算的 y*240+x 结果也是为1的,但是因为前面的地址已经强制转换成 short 类型了,所以这个偏移是 1个short长度,而不是一个单纯的地址长度,short是16bit的,所以最后得到 addr应该是 0x30000002
记录一下,面试的时候可能有用。