struct s
;#define offset(str_name,stat_name) (int)&((( str_name *)0)->stat_name)
intmain()
{printf
("偏移量為=>%d\n"
,offset
(struct s, a));
printf
("偏移量為=>%d\n"
,offset
(struct s, b));
printf
("偏移量為=>%d\n"
,offset
(struct s, c));
return
0;
定義好巨集
將結構體名字,和成員名傳入,(int)&(((struct s*)0)->a)
傳入後將結構體替換((struct s*)0)並且將0強制型別轉換成該struct s結構題型別的指標『
這個就相當於起始的偏移量了.
0->stat_name)=>0指向a的位址,就是起始位置到a這個位址的偏移量了然後講位址(int) &(0->a)
強制型別轉換成int得到結果
也可以這樣想a的位址-0起始位址就是偏移量
C語言中結構體偏移量的計算
一 先來一段理論知識 ansi c標準允許任何值為0的常量被強制轉換成任何一種型別的指標,並且轉換結果是乙個null指標,因此 s 0 的結果就是乙個型別為s 的null指標。如果利用這個null指標來訪問s的成員當然是非法的,但 s 0 m 的意圖並非想訪問s欄位內容,而僅僅是計算當結構體例項的首...
用乙個巨集求結構體某個變數的相對偏移量
用乙個巨集求結構體某個變數的相對偏移量 如 stuct student 則 find student,a 等於0 find student,b 等於4 definefind struc,e size t struc 0 e struc 0 表示將常量0強制轉化為struc 型指標所指向的位址,當然也...
乙個計算器的C語言實現
今天在讀 編譯原理及實踐 時。看到了乙個簡單的整數計算器的實現。依照書上的思路,我略微進行了擴充套件 1 從整數計算器擴充套件到小數計算器。2 支援除法 3 支援空字元。執行效果例如以下 非常easy,例如以下 cal.c include include char token double exp ...