[問題] 關於想計算出結構成員的offset

看板C_and_CPP作者 (魯騎)時間7年前 (2017/04/19 19:12), 7年前編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
大家好 新手又來叨擾大家了 題目: 我想寫出一個func 並且用這func算出member的offet位置 typedef struct _channel{ int channelOne; //0 char pChannel; //4 short iChl; //6 int abc; //8 }channel_t, *pChannel_t; (後面的註解是記憶體起始位置) 例如我想算出 abc 這個成員的offset,那麼就應該得出 offset=8 我的想法如下 channel_t *obj = (channel_t *)0; //這時的obj位址指向0 int *offset = &(obj->abc); //這時的 offset的位址確實等於8 問題來了....這邊的8實際上還是一個"address"... 我該如何讓它變成一個我想要的int整數呢? 想法一: int diff = (int)(&(obj->abc)); //嗯....error顯示不能這樣轉 想法二: int *diff = &(obj->abc) - &(obj-channelOne) //位置相減 這想法好像怪怪的.. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.196.10 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1492600328.A.882.html ※ 編輯: EngRookie (220.135.196.10), 04/19/2017 19:13:22

04/19 19:15, , 1F
address的差用ptrdiff_t存
04/19 19:15, 1F

04/19 19:17, , 2F
還有可以用offsetof
04/19 19:17, 2F

04/19 19:21, , 3F
查了一下 發現我這東西跟offsetof根本一模一樣阿...
04/19 19:21, 3F
文章代碼(AID): #1OzqO8Y2 (C_and_CPP)