c**如下:
#include
#define get_offset(data,member) (size_t)(&(((typeof(data)*)0)->member))
typedef struct studentstudent_t;
int main(int argc, char const *ar**)
**分析如下:
1. typeof 關鍵字:
用於獲取修飾修飾變數的資料型別。比如 int value; typeof( value ) 的作用是獲得 value 的資料型別int 。
用法:
int value; 我想要定義乙個 和value這個變數型別一樣的新變數new_value ;
操作像這樣: typeof(value) new_value ;
該用法可以用在函式的值傳遞中,在不知道值的型別的時候,可以定義和它型別相同的新變數。
2. typedef :
為資料型別起乙個名字 :比如 typedef struct student student_t ;
約定 :一般新名字後面以 _t 結尾,表示是乙個構造出來的新型別名字,便於理解。
student_t stud1 ; 等價於 struct student stud1 ; 很顯然 前者更有利於移植和閱讀。
3. ((data_type *)0) :
作用:把數字 0 強制轉換成 (data_type) 型別的指標。
比如:( struct student * )0 的作用是把 0 轉換成 struct student型別的指標,用於引用struct student資料型別型別的成員。
在這個題目中: ((typeof(data)*)0)->member 的目的是 把 0 轉成 data 變數對應的資料型別的指標,然後通過該指標引用該型別的成員的值。
對於本題而言: (size_t)(&(((struct student *)0)->d)) : & 用以獲取struct student結構的成員d ,然後,獲得d 的位址,將它轉成 size_t 的資料型別量。
其中 size_t 的定義是 typedef unsigned int size_t ;
(size_t)(&(((struct student *)0)->d)) 它的值是變數d的位址,為什麼是偏移值呢? 因為 起始位址我們認為規定為 0。
4. size_t :
typedef unsigned int size_t ;
1目的:便於不同系統之間的移植
取得URL相對於另乙個URL的相對路徑
今天群裡灰大出了個題 1 function getrelativeurl url,baseurl 用了點時間寫了一下 1 function getrelativeurl url,baseurl 7 r 8 domain a za z.9 port d 10 word g,11 1213 compar...
從乙個成員得到結構體的位址
container of巨集 define offset of type,member size t type 0 member type 結構名 member type 結構中的成員 type 0 告訴編譯器有乙個指向 type 結構的指標,其值為止0 type 0 member 取結構 type...
判斷乙個點相對於三角形的位置(借助向量)
如圖,點p在三角形abc內部,可以通過以下三個條件判斷 點p和點c在直線ab同側 點p和點b在直線ac同側 點p和點a在直線bc同側 如果以上三個條件同時滿足,則點p在三角形abc內部。下面將會用到叉乘這個數學工具來確定乙個點在直線的哪一側。三角形的三個頂點是轉著來的,算一次就行了。比如,在上圖中,...