在微控制器中,結構體操作及其位元組對齊問題(以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,此時會再...