C語言 —— 打印不同對象的字節表示 ( 對int*強制轉換成unsigned char*的理解 )
阿新 • • 發佈:2018-09-04
har class 拆分 sizeof 技術分享 打印 深入理解計算機系統 color 理解
此文章參考《深入理解計算機系統》P31。
先看如下代碼: 12345的十六進制表示為:0x00003039
1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 12345; 6 char *q = (char *)(&a); 7 for(int i = 0; i < sizeof(a); ++i) 8 printf("%.2x ", q[i]); 9 return 0; 10 }
輸出為:
a的地址是int*類型,其對象是int型的4字節的12345,當其強制轉換成unsigned char*類型的q時,由於char是1個字節,所以其對象會被一個字節一個字節的拆分,由於內存中是小端存儲( 低地址存低位,高地址存高位),所以q[0]是4字節的12345在內存中的第一個字節,依次類推(12345所占的4個字節被強制拆成了4個單字節的存儲),所以最後輸出為 39 30 00 00 。
C語言 —— 打印不同對象的字節表示 ( 對int*強制轉換成unsigned char*的理解 )