用乙個巨集求結構體某個變數的相對偏移量
如:
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...