[問題] 結構對齊

看板C_and_CPP (C/C++)作者 (涼雨)時間16年前 (2010/03/07 11:32), 編輯推噓4(401)
留言5則, 4人參與, 最新討論串1/1
我使用VC++2003 已把結構成員對齊四位元組打開 目前有一主要結構DATA和一個結構QUEUE struct DATA { int a; QUEUE c[50]; QUEUE d[17]; }; 我會把資料備份到sram 要寫入a的時候就位移0,寫入c就位移sizeof(int)+sizeof(QUEUE)*count ------------------------------- 現在我多塞了一個int變數b struct DATA { int a; int b; QUEUE c[50]; QUEUE d[17]; }; 寫入a,位移0,寫入b,位移sizeof(int) 寫入C位移sizeof(int)*2+sizeof(QUEUE)*count 可是會發現b的值常會錯誤,c的資料也都是0 會因為資料要對齊,所以我寫入的位移不能直接用sizeof(int)嗎? 我看以前人的寫法好像都會盡量把結構湊出4的倍數 但是上網查了一下,還是不太清楚怎麼變化 還是我應該直接抓address相減,來算位移量? ~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.168.18 ※ 編輯: clarkman 來自: 114.46.168.18 (03/07 11:33)

03/07 11:51, , 1F
的確最好是用address直接減出正確的offset....:)
03/07 11:51, 1F

03/07 12:30, , 2F
建議使用 offsetof 讓編譯器自已算 offset 比較安全
03/07 12:30, 2F

03/07 15:48, , 3F
我使用了樓上兩位的方法各測試一次,正確了!!感謝
03/07 15:48, 3F

03/07 23:25, , 4F
原來還有offsetof這個函數, 又學到了一招....<(_ _)>
03/07 23:25, 4F

03/07 23:39, , 5F
第一次看到 +1 @_@
03/07 23:39, 5F
文章代碼(AID): #1BanuxVf (C_and_CPP)
文章代碼(AID): #1BanuxVf (C_and_CPP)