[讨论] 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