小華的部落格: C語言複習3

搜尋此網誌

網頁

星期日, 2月 28, 2010

C語言複習3

~複習一下一些指標的概念~

問題一: 底下的這個做法的概念
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

沒有留言: