一個u8類型的數組,指針p指向該數組的第一個元素,p的類型是u8*,指針q也指向該數組的第一個元素,q的類型是u32*,問*p和*q的值是多少? 1 typedef unsigned long u32; 2 typedef unsigned short u16; 3 typedef unsigned ...
一個u8類型的數組,指針p指向該數組的第一個元素,p的類型是u8*,指針q也指向該數組的第一個元素,q的類型是u32*,問*p和*q的值是多少?
typedef unsigned long u32; typedef unsigned short u16; typedef unsigned char u8; int main(void) { u8 i; u8 tab[4] = {0x12, 0x34, 0x56, 0x78}; u8 *p = tab; u32 *q = (u32*)p; for (i=0; i<4; i++) { printf("%#x ", tab+i); printf("%#x\n", tab[i]); } printf("\n"); for (i=0; i<4; i++) { printf("%#x ", p); printf("%#x\n", *p); p++; } printf("\n"); printf("%#x\n", *q); return 0; } /************************************************* 在VC++6.0中的輸出結果是: 0x18ff40 0x12 0x18ff41 0x34 0x18ff42 0x56 0x18ff43 0x78 0x18ff40 0x12 0x18ff41 0x34 0x18ff42 0x56 0x18ff43 0x78 0x78563412 Press any key to continue *************************************************/
由於p是指向u8類型的指針,所以*p數值就是數組tab對應元素值。
由於q是指向u32類型的指針,所以*q數值就是u32類型的值。不同體繫結構的CPU,數據在記憶體中存放的排列順序是不一樣的,經測試知STM32F05x是小端模式,所以*q=0x78563412