看板 C_and_CPP 關於我們 聯絡資訊
我使用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)
VictorTom:的確最好是用address直接減出正確的offset....:) 03/07 11:51
layan:建議使用 offsetof 讓編譯器自已算 offset 比較安全 03/07 12:30
clarkman:我使用了樓上兩位的方法各測試一次,正確了!!感謝 03/07 15:48
VictorTom:原來還有offsetof這個函數, 又學到了一招....<(_ _)> 03/07 23:25
loveme00835:第一次看到 +1 @_@ 03/07 23:39