用乙個巨集求結構體某個變數的相對偏移量

2021-06-19 05:29:44 字數 685 閱讀 8425

用乙個巨集求結構體某個變數的相對偏移量

如:

stuct student 則:

find(student,a); //

等於0

find(student,b

);//等於4

#definefind( struc, e ) (size_t)&(((struc*)0)- >e)

(struc*)0 //

表示將常量0強制轉化為struc *型指標所指向的位址,當然也可以x,只是到最後還要減去這個x的值

((struc*)0)->e

表示在0位址處的結構體struc的成員e

&(((struc*)0)- >e)//

表示取結構體指標(struc*)0的成員e的位址,因為該結構體的首位址為0,所以其實就是得到了成員e距離結構體首位址的偏移量.

(size_t)//

是一種資料型別,為了便於不同系統之間移植而定義的一種無符號型資料,一般為unsigned int

//擴充套件一下,現在知道這個變數的位址,求結構體的首位址

#include

#define find(struct,pt,e )((int)pt-(int)(&(((struct*)0)->e)))

struct student

;int main()

乙個結構體的示例

定義乙個結構體teacher型別,然後宣告乙個teacher陣列 teacher包含名字和資料.teacher陣列元素在堆空間開闢 然後輸入名字年齡,接下來列印輸入的內容,再然後釋放開闢堆的記憶體 如下 include stdafx.h include include include define ...

用結構體實現乙個電話本

結構體是c語言又乙個儲存資料的型別,那麼用結構體怎麼實現乙個簡單的可以儲存1000個人資訊的 本呢?一.首先需要定義乙個結構體,包含乙個人的資訊 比如姓名,性別,年齡,住址等等 我們先來定義乙個結構體。typedef struct pdhb info pdhb info 二.需要儲存1000個人的資...

用容器去遍歷乙個學生資訊的結構體。

需求是這樣的,學生上下車的時候,我需要記錄該學生是上車,還是下車。方法 用乙個容器,當學生刷卡時候,先遍歷該容器,看能否找到該學生資訊的記錄,如果沒有,那麼就是上車,並增加該記錄 如果有,就是下車,並清除該記錄。過程 std mapm studentinfo forytschoolbus std m...