C語言實現定義乙個巨集計算偏移量和解析

2021-10-23 21:34:48 字數 630 閱讀 8540

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 ...