1. 程式人生 > >C語言 —— 打印不同對象的字節表示 ( 對int*強制轉換成unsigned char*的理解 )

C語言 —— 打印不同對象的字節表示 ( 對int*強制轉換成unsigned char*的理解 )

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*的理解 )