~複習一下一些指標的概念~
問題一: 底下的這個做法的概念
int a;
*&a=30;
Ans:
int a; 可以看成 _A WORD ?
&a 可以看成 LEA BX,_A
* 可以看成 MOV 東西到某個記憶體,所以*&a=30 等同於MOV [BX],30
其實他是等同於a=30,但是這樣子寫會跑更慢!code更大!
問題二:
*200 = 30;
Ans:
這樣子寫是非法的,因為雖然a 在記憶體200的位址,但是你不知道a是多大
所以你要告訴Compiler要一次搬兩個byte. 所以(int *) 等同於word ptr.
*(int *)200=30;
用組語來看會類似 mov word ptr [200],30
其中word ptr是假指令,用來一次搬兩個BYTE
[200] 代表記憶體位址200
沒有留言:
張貼留言