第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

?147. 設(shè)有如下定義語句:

?147. 設(shè)有如下定義語句:

C
包小龍蝦 2018-08-02 15:55:53
147. 設(shè)有如下定義語句:union u_type{ int i;double x;float f;};struct str_type{ char str[100];union u_type u[2];};則語句“printf("%d", sizeof(struct str_type));”的輸出結(jié)果是( )。A. 100B. 116C. 120D. 200
查看完整描述

3 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

我之前提過 C 標(biāo)準(zhǔn)沒有規(guī)定對齊值。題目應(yīng)該說明這些,但沒有,所以我只能按照 double 占 8 字節(jié),對齊值也是 8 來推算。


union 占用的內(nèi)存就是其最大成員占用的,所以 u_type 占用 8 字節(jié),對齊值也是 8。


struct 的第一個(gè)成員 str 是數(shù)組,占用 100 字節(jié),這沒有問題。第二個(gè)成員 u 占 8 * 2 字節(jié)也沒有問題。關(guān)鍵是 u 數(shù)組可以緊接著前面的 str,從第 101 字節(jié)開始放置嗎?

答案是不能。因?yàn)楸仨殱M足 u_type 對齊值 8 的要求,而 100 個(gè)字節(jié)之后第一個(gè)滿足 8 倍數(shù)的是 104,所以 u 數(shù)組應(yīng)從第 105 字節(jié)開始放置。

還有一點(diǎn)是我在 146 題的回答略掉的內(nèi)容:struct 本身的大小也必須是其對齊值的倍數(shù)。struct 的對齊值一般是其成員對齊值中最大的,所以 struct str_type 的對齊值也應(yīng)是 8。

這樣 struct str_type 目前就占用 104 + 8 * 2 = 120 個(gè)字節(jié)。120 剛好也是 8 的倍數(shù),所以結(jié)尾處也不需要填充空位了。整個(gè) struct 的大小就是 120 字節(jié)。

查看完整回答
1 反對 回復(fù) 2018-08-12
  • 包小龍蝦
    包小龍蝦
    如果說我在146題理的思路沒有問題的話那這題就是說:u_type 占用 8 字節(jié),而后面struct 用到了union,雖然union先定義但是在struct中成員按照定義時(shí)的順序依次存儲在連續(xù)的內(nèi)存空間。char str[100];先,而union在后,所以char str[100];這個(gè)先存是100個(gè)字節(jié),而100不是union的整數(shù)倍,所以加4,104剛好是union的整數(shù)倍(這邊算union的整數(shù)倍應(yīng)該是算union原先沒×2前的8的整數(shù)倍而不是16)然后104+8*2=120,而120也滿足(2)結(jié)構(gòu)體大小必須是所有成員大小的整數(shù)倍,即所有成員大小的公倍數(shù)。這邊的所有成員大小的整數(shù)倍是說滿足char ;union ;(1和8的整數(shù)倍)吧?大神在兩題中都在強(qiáng)調(diào)整數(shù)倍的關(guān)系,那我以后做題就抓住這兩點(diǎn)可以嗎?(1)結(jié)構(gòu)體變量中成員的偏移量必須是成員大小的整數(shù)倍 (2)結(jié)構(gòu)體大小必須是所有成員大小的整數(shù)倍, 即所有成員大小的公倍數(shù)。
  • onemoo
    onemoo
    我有另寫了一個(gè)回復(fù)
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

在前面 146 題那里,我對你的理解進(jìn)行了下“修正”,再次強(qiáng)調(diào)了對齊值的存在。

double 占 8 字節(jié),所以 union 占 8 字節(jié)沒錯(cuò)。而 union 的對齊值是 int、double、float 這三個(gè)類型的對齊值中最大的一個(gè)。? 我們是假定 double 的對齊值是 8,才得出 union 的對齊值是 8 這個(gè)結(jié)論的。

對此,我一直強(qiáng)調(diào)題目不嚴(yán)謹(jǐn),沒有給出類型的對齊值。 事實(shí)上,就我明確知道的,在某些平臺下,double 的對齊值是 4。? 所以我一直說,我只是猜測出題人預(yù)想的對齊值來進(jìn)行假設(shè)計(jì)算。


所以也不能說“而100不是union的整數(shù)倍”,而是“100不是union的對齊值的整數(shù)倍”——在我猜測 union 對齊值是 8 的前提下。

后面你應(yīng)該也能猜到我要說什么了:

不是“結(jié)構(gòu)體大小必須是所有成員大小的整數(shù)倍,即所有成員大小的公倍數(shù)”,而是“結(jié)構(gòu)體大小必須是其對齊值的整數(shù)倍”。

當(dāng)然這道題在我們假定 union 的對齊值是 8,struct 的對齊值是 8 的前提下,確實(shí)是“1 和 8 的整數(shù)倍”


所謂強(qiáng)調(diào)“整數(shù)倍關(guān)系”實(shí)際上是要“滿足對齊要求”,即要推算出正確的對齊值,再算出是否需要偏移。

查看完整回答
反對 回復(fù) 2018-08-12
?
修裾欲溯空

TA貢獻(xiàn)34條經(jīng)驗(yàn) 獲得超4個(gè)贊

選c啊

查看完整回答
反對 回復(fù) 2018-08-03
點(diǎn)擊展開后面1
  • 3 回答
  • 1 關(guān)注
  • 1342 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號