看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《liptonbin (wind)》之銘言: : 今天面試考了一題,如下 : 請宣告一個struct 且 賦與其變數值 : offset size name format data : 0x000 1 USB_Field Integer 0010 : 0x001 2 USB_Field_2 Integer 0020 : 0x005 4 USB_Field_3 string 0025 : 0x007 2 USB_Field_4 Integer 0010 ■: byte USB_Field USB_Field_2 USB_Field_3 USB_Field_4 只考慮所佔大小的話, 記憶體佈局大概是這樣: 0 1 2 3 4 5 6 7 8 (位移) 但是把位移加進來的話: 0 1 2 3 4 5 6 7 8 (位移) ■■ ■■■■ ■■ 記憶體重疊的話, 表示需要搭配 union 來實作: #include <stdint.h> // 請愛用能保證大小的型態 struct USB { int8_t USB_Field; int16_t USB_Field_2; union { struct { int16_t unused; char USB_Field_3[ 4 ]; }third; struct { int32_t unused; int16_t USB_Field_4; }fourth; }common; } __attribute__((packed));// 注意這行, 每個編譯器需要的 // 指令不太一樣, 告訴它不要為 // 了加速在每個成員間加料 : 我答案寫成底下,不曉得這樣對不對?麻煩高手指正一下,謝謝 : 另外format是integer 而size是1,我用char去宣告,不曉得這樣對不對?? : struct USB{ : char USB_Field; : short USB_Field_2; : int USB_Field_3; : short USB_Field_4; : }; : USB *p; : p->USB_Field=0010; : p->USB_Field_2=0020; : p->USB_Field_3=0025; : p->USB_Field_4=0010; struct USB usb; usb.USB_Field = 0010; usb.USB_Field_2 = 0020; strcpy( usb.common.third.USB_Field_3, "025" ); usb.common.fourth.USB_Field_4 = 0010; 我也覺得是題目中成員大小給錯...囧 -- ▂▂ ▄▂ T.T.L Listen 2 http://ppt.cc/jIUk ˇ ˇˇ ˇ 說什麼結束 ▃▃ http://ppt.cc/zQtB ψ髮箍 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (04/28 00:59)
POSIX:版主根本就是把BBS當成小畫家!!XD 04/28 07:41
xatier:推版主招牌圖解! 04/28 08:31
aecho:上色好漂亮啊 >///< 04/28 09:43
ouyang0916:幫推 感謝大大分享 04/28 12:10
kay2005:推!! 04/29 01:00