欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 關(guān)于一個C語言結(jié)構(gòu)指針的臆想 [打印本頁]

作者: xuwei    時間: 2015-6-13 17:08
標題: 關(guān)于一個C語言結(jié)構(gòu)指針的臆想


我為這個問題糾結(jié),那就是C中的結(jié)構(gòu)指針,書中常見的形制大致是這樣的:
struct
{
     uint32_t a;
     uint16_t b;
     uint8_t c;
}*numb;
然后再程序中引用這個結(jié)構(gòu)指針就是numb->a和numb->b沒什么問題,悲劇的是在庫文件中發(fā)現(xiàn)一種我不能解釋的形制如下:
#define numb (numb_typ*)地址這種新式,numb_typ是一個類似結(jié)構(gòu)宏的定義,問了好多人,只言片語,不解其故,怎么解釋呢?我翻來覆去的想這個問題,終于在今早上洗臉的時候突然想到這問題可能是這樣的:

首先:不要管這個宏把它拆解,就是(numb_typ*)地址這種形式那么這個numb_typ是數(shù)據(jù)類型因為沒記錯的的話結(jié)構(gòu)和枚舉都是數(shù)據(jù)類型,有在外面加了括號-----“強制類型轉(zhuǎn)換”但是他轉(zhuǎn)換誰呢?轉(zhuǎn)換地址嗎?顯然不是,他肯定不是轉(zhuǎn)換地址,地址他也不需要轉(zhuǎn)換,那他轉(zhuǎn)換誰呢?這時候看看他的后面緊跟“*”,似乎預(yù)示著什么?是不是可以理解為他強制轉(zhuǎn)換了一個結(jié)構(gòu)指針?但是變量跑哪里去了?沒有變量的指針傷不起啊,從結(jié)果看是肯定定義的,因為結(jié)果中就是用結(jié)構(gòu)指針的形式訪問的。
其次:另一方面講他有不符合常理,不按套路出牌,他沒有用賦值的辦法來把地址寫入而是直接類似定義一個結(jié)構(gòu)指針變量,但是只有把它理解成它定義了一個結(jié)構(gòu)指針變量才符合常理,就變成這種
          (numb_typ)*p;
          p=(numb_typ*)地址;//立即數(shù)轉(zhuǎn)換為地址

這樣P就是一個結(jié)構(gòu)指針,他就指向以這個地址開頭的連續(xù)數(shù)據(jù)區(qū)域。所以:
(numb_typ*)地址<=>(numb_typ)*p;p=地址;兩者等價,前者的形制更簡便速度更快,效率更高,只有他等價才可以解釋為什么可以用結(jié)構(gòu)指針來訪問,想必就是“*”帶來的困惑,哎!

總之:以上所述均是不可靠的,有帶進一步請教高人,暫且這樣理解吧,這種寫法是合法的,C語言啊C語言靈活是你的優(yōu)點也是你的缺點,你太靈活大了!這也映射了人生,加油吧,不管結(jié)果是什么但我從未放棄!














歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1