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

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

為什么此offsetof()實(shí)現(xiàn)有效?

為什么此offsetof()實(shí)現(xiàn)有效?

白衣非少年 2019-12-15 16:12:45
在ANSI C中,offsetof定義如下。#define offsetof(st, m) \    ((size_t) ( (char *)&((st *)(0))->m - (char *)0 ))為什么由于我們?nèi)∠肗ULL指針,這為什么不會(huì)引發(fā)分段錯(cuò)誤?還是這種編譯器黑客看到了偏移量的唯一地址,因此它靜態(tài)地計(jì)算了地址而沒有實(shí)際取消引用呢?此代碼也可移植嗎?
查看完整描述

3 回答

?
慕尼黑8549860

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

上面的代碼中沒有任何內(nèi)容被取消引用。當(dāng)在地址值上使用*或->查找引用的值時(shí),將發(fā)生取消引用。*上面的唯一用途是用于類型轉(zhuǎn)換的類型聲明。


在->操作上面使用,但它不是用來訪問值。相反,它用于獲取值的地址。這是一個(gè)非宏代碼示例,應(yīng)使其更清晰一些


SomeType *pSomeType = GetTheValue();

int* pMember = &(pSomeType->SomeIntMember);

第二行實(shí)際上并不會(huì)導(dǎo)致取消引用(取決于實(shí)現(xiàn))。它只是返回值SomeIntMember內(nèi)的地址pSomeType。


您看到的是在任意類型和char指針之間進(jìn)行了大量轉(zhuǎn)換。使用char的原因是,它是C89標(biāo)準(zhǔn)中唯一具有明確大小的類型之一(也許是唯一)。大小為1。通過確保大小為1,上述代碼可以達(dá)到計(jì)算值的真實(shí)偏移量的魔力。



查看完整回答
反對 回復(fù) 2019-12-16
?
素胚勾勒不出你

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

盡管這是的典型實(shí)現(xiàn)offsetof,但該標(biāo)準(zhǔn)并沒有強(qiáng)制要求該標(biāo)準(zhǔn):


在標(biāo)準(zhǔn)標(biāo)頭中定義了以下類型和宏<stddef.h>[...]


offsetof(type,member-designator)


它擴(kuò)展為一個(gè)整數(shù)常量表達(dá)式,其類型為size_t,member-designator從其結(jié)構(gòu)的開頭(由表示)到結(jié)構(gòu)成員(由表示)的偏移量(以字節(jié)為單位type)。類型和成員代號(hào)應(yīng)使


statictypet;


然后該表達(dá)式求值為一個(gè)地址常數(shù)。(如果指定的成員是位字段,則行為未定義。)&(t.member-designator)


閱讀PJ Plauger的“標(biāo)準(zhǔn)C庫”以獲取有關(guān)該庫以及其他<stddef.h>所有項(xiàng)目的討論,這些項(xiàng)目可能都是(應(yīng)該?)使用適當(dāng)?shù)恼Z言編寫的邊界功能,并且可能需要特殊的編譯器支持。


它僅具有歷史意義,但是我在386 / IX上使用了較早的ANSI C編譯器(請參閱,大約在1990年,我告訴過您歷史性的意義),該版本在該版本上崩潰了,offsetof但當(dāng)我將其修改為:


#define offsetof(st, m) ((size_t)((char *)&((st *)(1024))->m - (char *)1024))

那是某種編譯器錯(cuò)誤,尤其是因?yàn)闃?biāo)頭是隨編譯器一起分發(fā)的,因此不起作用



查看完整回答
反對 回復(fù) 2019-12-16
  • 3 回答
  • 0 關(guān)注
  • 693 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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