[問題] ((TYPE *) 0)-> .... 代表的是??

看板C_and_CPP作者 (幻風)時間15年前 (2009/08/11 21:22), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/2 (看更多)
有沒有高手請教一下我的疑惑 感恩 這MACRO 最主要是要回傳This 指標的PRIVATE 資料 其中 Record 為一指標 BBS_PROTOCOL * This TYPE 為一結構 Field 為結構TYPE 中一個 component #define _CR(Record, TYPE, Field) \ ((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field))) 1.最不能理解的是 0 ((TYPE *) 0) 這結構0代表是神麼意思? 2. &(((TYPE *) 0)->Field))) 轉型為 (CHAR8 *) ? 位址轉型為 指向 CHAR8 的指標 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.22.230

08/11 21:32, , 1F
0 就是null 轉型成type* 用->取得她的member Field
08/11 21:32, 1F

08/11 21:35, , 2F
Field照你打的應該是 CHAR8型態 所以也轉型成CHAR8
08/11 21:35, 2F

08/11 23:26, , 3F
那應該是計算 FIELD 在 TYPE 中的偏移. 但整句看起來似乎不
08/11 23:26, 3F

08/11 23:26, , 4F
是取出 This 的 PRIVATE 資料.
08/11 23:26, 4F

08/12 01:14, , 5F
比較像是用某 member 位址回推整個 struct 變數的起始位址
08/12 01:14, 5F

08/12 01:16, , 6F
而 Record 會是一個指標, 並且指向那個 member
08/12 01:16, 6F
文章代碼(AID): #1AWN1v01 (C_and_CPP)
文章代碼(AID): #1AWN1v01 (C_and_CPP)