C語言中既鞠,指針變量之間的類型轉(zhuǎn)換

注:這篇文章中涉及的很多內(nèi)容,都跟自己的硬件直接相關(guān)喷舀,所以砍濒,讀者如果自行嘗試,可能會(huì)得到不一致的結(jié)果硫麻。不過針對本文爸邢,一般結(jié)果應(yīng)該是一致的。

在C語言中拿愧,類型轉(zhuǎn)換是一件很惱人的事情杠河。我們必須理解到底是如何進(jìn)行類型轉(zhuǎn)換的,以及各種計(jì)算機(jī)內(nèi)部的操作浇辜,才能在出現(xiàn)各種稀奇古怪的事件時(shí)券敌,做到處之泰然。

一般的變量之間的類型的相互轉(zhuǎn)換柳洋,倒也還好說待诅。然而,指針變量之間的類型轉(zhuǎn)換熊镣,卻有些麻煩卑雁。

下面我以一個(gè)例子說明,指針變量之間進(jìn)行類型轉(zhuǎn)換時(shí)轧钓,其內(nèi)部到底都發(fā)生了什么序厉。

先上代碼:

這段代碼是干什么用的呢?它會(huì)打印出65所對應(yīng)的ASCII碼毕箍,也就是"A".如果只是單純的想進(jìn)行這個(gè)轉(zhuǎn)換弛房,我們使用普通變量之間的類型轉(zhuǎn)換,就完全足夠而柑。這里我們?yōu)榱肆私馄渲羔樧兞恐g的類型轉(zhuǎn)換的過程文捶,所以使用指針來做。

我們首先驗(yàn)證一下結(jié)果:

從上圖中媒咳,我們可以看到粹排,結(jié)果確實(shí)是"A"。與ASCII碼表中一致涩澡。

那么其背后到底發(fā)生了什么呢?為什么會(huì)轉(zhuǎn)換成"A"?

首先顽耳,我們都知道,指針變量實(shí)際上存儲(chǔ)的是內(nèi)存中的一塊地址妙同,也就是說射富,這里指針變量a實(shí)際上c這個(gè)變量的地址,假設(shè)其邏輯內(nèi)存地址為0x7ffd0d8824ec粥帚,則有下圖:

要明白為什么其會(huì)被轉(zhuǎn)換成"A",我們需要了解c這個(gè)變量胰耗,也就是0x7ffd0d8824ec這個(gè)內(nèi)存地址上,65是如何存放的芒涡。在我的機(jī)器上柴灯,int類型的長度為4卖漫,所以65轉(zhuǎn)換成四個(gè)字節(jié)的十六進(jìn)制形式為:0x00000041.我們還需要了解機(jī)器上,是按小端存儲(chǔ)還是大端存儲(chǔ)的方式來存儲(chǔ)的赠群。在上面的代碼中羊始,被注釋的那幾行就是用來測試機(jī)器上的存儲(chǔ)方式。這里我得到我機(jī)器上的存儲(chǔ)方式為小端存儲(chǔ)乎串。所以店枣,實(shí)際的存儲(chǔ)方式如下圖:

然后,我們將a這個(gè)int類型的指針變量叹誉,經(jīng)過類型轉(zhuǎn)換后,賦值給b這個(gè)變量闷旧,現(xiàn)在a,b,c三個(gè)變量之間的關(guān)系长豁,就如下圖所示:

指針變量的類型,就好比一個(gè)標(biāo)簽忙灼,用于讀取實(shí)際的值時(shí)匠襟,判斷如何進(jìn)行解析。a這個(gè)指針變量该园,其類型為int,所以其在解析時(shí)酸舍,會(huì)讀取0x7ffd0d8824ec之后的四個(gè)字節(jié)。而b這個(gè)指針變量里初,因?yàn)槠漕愋蜑閏har,其長度為1個(gè)字節(jié)啃勉,所以其在解析時(shí),會(huì)讀取地址為0x7ffd0d8824ec這一個(gè)字節(jié)双妨。

因?yàn)槭前葱《舜鎯?chǔ)的方式淮阐,所以b在解析時(shí),讀取一個(gè)字節(jié)刁品,正好讀到0x41,其對應(yīng)的字符就是A.

你可以嘗試一下泣特,如果c這個(gè)變量的值是321,則b對應(yīng)哪個(gè)字符。答案是挑随,還是A.

從上面的解釋中状您,我們可以看到,關(guān)鍵就在于解析時(shí)指針變量的類型的長度兜挨,所以膏孟,不同類型的指針變量之間,不能胡亂轉(zhuǎn)換暑劝,否則會(huì)因?yàn)轭愋偷拈L度不一致骆莹,出現(xiàn)奇怪的結(jié)果。比如担猛,你可以嘗試一下幕垦,把上面的程序換成char類型的指針變量轉(zhuǎn)換成int類型的指針變量丢氢。結(jié)果會(huì)出乎意料。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末先改,一起剝皮案震驚了整個(gè)濱河市疚察,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仇奶,老刑警劉巖貌嫡,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異该溯,居然都是意外死亡岛抄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門狈茉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夫椭,“玉大人,你說我怎么就攤上這事氯庆〔淝铮” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵堤撵,是天一觀的道長仁讨。 經(jīng)常有香客問我,道長实昨,這世上最難降的妖魔是什么洞豁? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屠橄,結(jié)果婚禮上族跛,老公的妹妹穿的比我還像新娘。我一直安慰自己锐墙,他們只是感情好礁哄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溪北,像睡著了一般桐绒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上之拨,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天茉继,我揣著相機(jī)與錄音,去河邊找鬼蚀乔。 笑死烁竭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吉挣。 我是一名探鬼主播派撕,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婉弹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了终吼?” 一聲冷哼從身側(cè)響起镀赌,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎际跪,沒想到半個(gè)月后商佛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姆打,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年良姆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幔戏。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歇盼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出评抚,到底是詐尸還是另有隱情,我是刑警寧澤伯复,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布慨代,位于F島的核電站,受9級特大地震影響啸如,放射性物質(zhì)發(fā)生泄漏侍匙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一叮雳、第九天 我趴在偏房一處隱蔽的房頂上張望想暗。 院中可真熱鬧,春花似錦帘不、人聲如沸说莫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽储狭。三九已至,卻和暖如春捣郊,著一層夾襖步出監(jiān)牢的瞬間辽狈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工呛牲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刮萌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓娘扩,卻偏偏與公主長得像着茸,于是被迫代替她去往敵國和親壮锻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型元扔。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一躯保。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,444評論 3 44
  • 1.語言中變量的實(shí)質(zhì) 要理解C指針澎语,我認(rèn)為一定要理解C中“變量”的存儲(chǔ)實(shí)質(zhì)途事, 所以我就從“變量”這個(gè)東西開始講起吧...
    金巴多閱讀 1,774評論 0 9
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法擅羞,內(nèi)部類的語法尸变,繼承相關(guān)的語法,異常的語法减俏,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 1.網(wǎng)易云課堂 網(wǎng)站:http://study.163.com/ 簡介:可能是中國最好的免費(fèi)在線學(xué)習(xí)網(wǎng)站娃承,網(wǎng)易云是...
    向日葵騷年閱讀 4,295評論 2 12
  • 今天是2月16日 周四 依舊是每晚晚睡 像往常一樣 白天上班 晚上熬夜 這大概就是我們90后 或是00后的生活常態(tài)...
    Cc不是膽小鬼閱讀 223評論 0 2