|
一个个来:, Q" l7 Z; |1 T0 U
1 (unsigned long*)0x20000000;这个语句指的是什么意思?是把0x20000000定义成指针吗?) x4 P0 W* d$ G/ F1 H v/ w
*0x20000000=2,表示的是将2放到0x20000000这个地址中?
?8 {% B% G$ ?5 R, j8 M答:(unsigned long*)0x20000000的意思,和楼上意见一致,就是强制类型转换,将0x20000000强制转换为指针,至于' e) E& @- s9 J1 u- z0 Q b; W
*0x20000000=2,首先这个写法就是错误的,就算理解为将2放到0x20000000这个地址中,但是对于指向0x20000000这个地址的指针类型并没有指定,所以这个写法有问题,如果写为:*(unsigned long*)0x20000000 = 2;这就和过程说的那个意思一致了。/ L, b6 |, q9 ^* X- O
% I0 N2 B+ Y2 `2(unsigned long*)0x20000000=2;这个赋值是错误的吧?
r$ R' F. ~) v, c *(unsigned long*)0x20000000=2 这样赋值是正确的吧?3 `# `7 q0 L4 {9 y4 r; _
答:(unsigned long*)0x20000000=2;这个赋值的确是错误的,为什么错误,1中已经说过(unsigned long*)0x20000000是将0x20000000强制类型转换为指针,这里的这句代码在字面理解就是讲刚刚强制转换的一个指向0x20000000的指针转换为一个指向地址为0x2的地址的指针。这个是不允许的。
( V4 q7 r% ^ R* x2 I那么这句代码要怎么样就对了呢?改为 *(unsigned long*)0x20000000=2;就对了,为什么对?. |. a, T# P) R: ]
刚才说了(unsigned long*)0x20000000已经相当于一个指针了,通过*号取指针指向地址的值就可以进行操作该地址处的数据了。6 @5 N3 t" @- ?+ r
/ b% H" f) ^6 O
3 define P(unsigned long*)0x20000000 ;
/ }$ i9 Z6 l/ }& _ *P=2;8 K' o8 r' r! C5 m
与6 {+ [* i9 q" E$ x: o
Define P *(unsigned long*)0x20000000;
( x1 [, }4 f7 k P=2;
' U3 l) m5 o. _+ u% v/ G b; r( \1 d答:这两句话是等价的(麻烦把代码写对,前面漏了#号,后面多了;号),为什么对?$ B; N# [) s9 e3 b: X: l
宏就是替换的作用,上面两种写法就是把代码放在不同地方而已,并没有什么不同。
' G( e. ~) N9 B$ {) `! e# k0 b% i8 h; ?$ ? s6 p
最后,以上解答均经过验证。有疑问随时反馈。 |
|