// 解釋一下就是將 0x11223344 看作字符串 “0x11223344\0”;尾端:44;
// 高端就是 “11 22 33 44” 進行存儲;(大端)
地址 0 1 2 3
低地址--->高地址:尾端44存在高地址;
// 低尾端就是 “ 44 33 22 11”進行存儲;(小端)
地址 0 1 2 3
低地址--->高地址:尾端44存在低地址;
2. 在這裏先列出我所知到的兩種判斷機器大小端存儲的方式:
方式 1:
/* 利用指針來區分大小端 */
- void Judge_duan()
- {
- int a = 1; //定義爲1是爲了方便 如果你喜歡你可以隨意,
- //只要你能搞清楚 例如:0x11223344;
- charchar *p = (charchar *)&a;//在這裏將整形a的地址轉化爲char*;
- //方便後面取一個字節內容
- if(*p == 1)//在這裏解引用了p的一個字節的內容與1進行比較;
- printf("小端\n");
- else
- printf("大端\n");
- }
這是我自己畫的圖解 比較粗糙 希望可以幫助大家理解!
方式 2:
- /* 利用聯合體來檢測大小端 */
- #include<stdio.h>
- #include<stdlib.h>
- void Judge_duan(void)
- {
- union t
- {
- int i;
- char c;
- } t1;
- t1.i = 1;
- if(t1.c == 1)
- printf("小端\n");
- else
- printf("大端\n");
- }
- int main()
- {
- Judge_duan();//在這裏我們封裝成一個函數,
- //可以有參數和返回值也可以不需要
- system("pause");
- return 0;
- }
聯合的概念在這裏我簡單的說明一下,不作詳細介紹;
3.聯合:
聯合體的各個成員共用內存,並應該同時只能有一個成員得到這塊內存的使用權(即對內存的讀寫),而
結構體各個成員各自擁有內存,各自使用互不干涉。