結構體應用及其位元組對齊問題

2022-05-04 02:12:10 字數 1260 閱讀 3388

在微控制器中,結構體操作及其位元組對齊問題(以lcd選單為例)

#include typedef struct menuitem menuitem_typedef;

const

char* mainmenulanguage[3][10] =,,,

};//

變數宣告

menuitem_typedef menul1_dev[10

]; menuitem_typedef*pcuritem;

const

char *pcurtitle;

int main(void)

printf("

%d \n

", sizeof(const unsigned char *));//

4位元組 printf("

%d \n

", sizeof(void (*)(void)));//

函式指標4位元組

printf("

%d \n

", sizeof(bool));//

1位元組 printf("

%d \n

", sizeof(struct menuitem));//

28位元組

printf("

%d \n

", sizeof(struct menuitem *));//

4位元組 printf("

%d \n

", sizeof(menul1_dev));//

280位元組

printf("

menul1_dev addr=%d \n

", menul1_dev);//

addr1 = 4339288

pcuritem = menul1_dev + 1

; printf("

pcuritem addr=%d \n

", pcuritem);//

addr2= addr1+28 = 4339316

pcurtitle = menul1_dev->title + 2

; printf(

"pcurtitle=%s \n

", pcurtitle);//

引數設定

pcurtitle = (menul1_dev+1)->title + 4

; printf(

"pcurtitle=%s \n

", pcurtitle);//

碼設定return0;

}

結構體位元組對齊問題

結構體 struct 的sizeof值,並不是簡單的將其中各元素所佔位元組相加,而是要考慮到儲存空間的位元組對齊問題。先看下面定義的兩個結構體.struct s1 struct s2 分別用程式測試得出sizeof s1 6 sizeof s2 4 可見,雖然兩個結構體所含的元素相同,但因為其中存放...

結構體位元組對齊

include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...

結構體位元組對齊

include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...