資料存在記憶體裡, 資料需要有個位址讓電腦知道該去哪個位址抓資料, 如下圖可知位址是向下遞增的, 舉例0x20這個位址所存的資料是0x91, 而0x26所存的資料是0x20
再來是指標實戰, 在EFI BIOS這套SDK(System Development Kit, 系統開發套件)有一種資料型態是UINT系列, 比如UINT8(8-BIT), UIINT16(16-BIT), UINT32(32-BIT), 我用這種資料型態來說明
以下參考上圖 :
1. (UINT8* )(0x21) => 代表0x21是一個位址
2. 若加個*如同右邊 *(UINT8* )(0x21) ==>代表取0x21位址裡的資料就是0x22
3. 之前介紹的指標PTR假設它宣告在0x20, 則可透過PTR = (UINT8* )(0x21)讓它指向位址0x21
此時*PTR = *(UINT8* )(0x21) = 0x22
4. *(UINT16* )(0x21) ==> 代表一次儲存2 BYTE(16-BIT), 所以值是0x2322
5. *( ( (UINT16* )(0x21) ) + 1) ==> 這裡的"+1"因為單位是2 BYTE, 所以等於0x21 + 2 = 0x23, 故值為 *(UINT16* )(0x23)等於0x2524
6. *( ( (UINT8* )( ( (UINT16* )(0x21) ) + 1 ) ) + 3 ) ==>
先化簡為 *( ( (UINT8* )((UINT16* )(0x23) ) ) + 3 ) ==>
運用指標型態轉換把(UINT16* )轉成(UINT8* ), 原式變成如此*( (UINT8* )(0x23) ) + 3 ) ==>
UINT8的大小是1BYTE, 所以0x23要加3, 原式變成*(UINT8* )0x26 = 0x27
沒有留言:
張貼留言