[討論] Casting

作者: nomorejerry (m e l o)   2014-09-15 14:41:55
請教各位大大一個有關casting的問題
aData8 = *(volatile UINT8 *)(PCH_LPC_RCBA_BASE_ADDRESS + R_PCH_RCRB_BUC);
有一敘述如上:
假設(PCH_LPC.... + R_PCH_RCRB_BUC) = 0x80000000
volatile也暫時don't care
我的解讀是
0x80000000 被casting成UINT8的address,然後再被取值
但如果先被casting成UINT8的話,不就變成0x00被取值
應該要寫成 *(UINT32 *)(PCH.... + _BUC);
這樣才會取到(PCH.... +_BUC)的值,這樣才對吧?
請各位大大解惑,謝謝
作者: azureblaze (AzureBlaze)   2014-09-15 14:44:00
UINT8的位址還是32bit(UINT8*)1234; 和(UINT8)1234;是不同的東西
作者: nomorejerry (m e l o)   2014-09-15 14:53:00
請教a大,你是說那行並不是轉行成8bit的address?
作者: carylorrk (carylorrk)   2014-09-15 16:36:00
sizeof(UINT8*) 和 sizeof(int*) 值基本上是一樣的在這裏兩者和 sizeof(UINT8) 不同

Links booklink

Contact Us: admin [ a t ] ucptt.com