|
一个个来:) W7 K/ F0 n. D6 `5 v* T
1 (unsigned long*)0x20000000;这个语句指的是什么意思?是把0x20000000定义成指针吗?. U0 q; B! d, E: g! h6 s
*0x20000000=2,表示的是将2放到0x20000000这个地址中?# s' O) \, b7 h) v8 O
答:(unsigned long*)0x20000000的意思,和楼上意见一致,就是强制类型转换,将0x20000000强制转换为指针,至于
( k& R7 V8 \: L, ~*0x20000000=2,首先这个写法就是错误的,就算理解为将2放到0x20000000这个地址中,但是对于指向0x20000000这个地址的指针类型并没有指定,所以这个写法有问题,如果写为:*(unsigned long*)0x20000000 = 2;这就和过程说的那个意思一致了。- {- D! d& m3 J% C6 B, h# C- O
; s2 G3 I- T+ P z4 A
2(unsigned long*)0x20000000=2;这个赋值是错误的吧?9 y2 f' ?0 O/ d
*(unsigned long*)0x20000000=2 这样赋值是正确的吧?0 J: h7 \. J" R! ^
答:(unsigned long*)0x20000000=2;这个赋值的确是错误的,为什么错误,1中已经说过(unsigned long*)0x20000000是将0x20000000强制类型转换为指针,这里的这句代码在字面理解就是讲刚刚强制转换的一个指向0x20000000的指针转换为一个指向地址为0x2的地址的指针。这个是不允许的。
& F4 T9 ~% {* ^那么这句代码要怎么样就对了呢?改为 *(unsigned long*)0x20000000=2;就对了,为什么对?
" ~' J4 V/ d+ K2 q6 g刚才说了(unsigned long*)0x20000000已经相当于一个指针了,通过*号取指针指向地址的值就可以进行操作该地址处的数据了。
; `: y# L& a B9 R* I4 H. ]. @; S; b5 s
3 define P(unsigned long*)0x20000000 ;! v9 e0 X/ C# N; L: N8 O
*P=2;
. o3 E. Y$ E( Q" N4 [$ }与
: N0 R7 R8 [2 ~; qDefine P *(unsigned long*)0x20000000;1 ^: d, `+ m& z8 m
P=2;7 C, A T! k& p0 S, }7 g; q, r+ r
答:这两句话是等价的(麻烦把代码写对,前面漏了#号,后面多了;号),为什么对?
: n' u& p/ M" ^+ i9 m' a5 A宏就是替换的作用,上面两种写法就是把代码放在不同地方而已,并没有什么不同。8 U6 W2 d- R) L9 y: v& u5 Q
- Y1 H A1 m3 s5 E7 {! b5 @
最后,以上解答均经过验证。有疑问随时反馈。 |
|