C語(yǔ)言指針是一個(gè)非常重要的存在,但是我們?cè)趯W(xué)習(xí)C語(yǔ)言的時(shí)候可以知道有好幾種指針類型,因此許多小伙伴們都不太了解C語(yǔ)言的指針類型,那么我們現(xiàn)在就去看看關(guān)于C語(yǔ)言的指針類型的內(nèi)容吧。
指針存儲(chǔ)了內(nèi)存的地址,同時(shí)指針是有類型的,如int*,float*,那么,一個(gè)自然的猜想就是指針變量應(yīng)該存儲(chǔ)這兩方面的信息:地址和指針類型,比如,就像下面的結(jié)構(gòu)體:
舉個(gè)例子:打印sizeof(int*),值為4,可見4字節(jié)是存儲(chǔ)內(nèi)存地址用的,反過(guò)來(lái)就說(shuō)明指針并沒(méi)有存儲(chǔ)類型信息的地方,那么指針的類型信息存放在哪兒呢?
下面剖析一段簡(jiǎn)單的代碼。
?
?
?
void main()
{
pi=&gi;
*pi=12;
}
反匯編結(jié)果:
?
?
可見byte就說(shuō)明了指針類型的信息。
總結(jié):C語(yǔ)言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,關(guān)乎于讀寫的長(zhǎng)度,沒(méi)有存儲(chǔ)在指針變量中,位于用該指針讀寫時(shí)的mov指令中,不同的讀寫長(zhǎng)度對(duì)應(yīng)的mov指令不同。
?
另外:在指針強(qiáng)制轉(zhuǎn)換時(shí),也是這個(gè)原理。就是指針強(qiáng)制轉(zhuǎn)換的影響不是在轉(zhuǎn)換的時(shí)候發(fā)生,而是在用轉(zhuǎn)換后的身份去訪問(wèn)內(nèi)存時(shí)體現(xiàn)到了指令中。
那么指針在什么情況下轉(zhuǎn)換是安全的呢?就是看用這個(gè)轉(zhuǎn)換后的身份去訪問(wèn)內(nèi)存是否安全。簡(jiǎn)要的說(shuō)有以下原則:如果轉(zhuǎn)換后指針指向的數(shù)據(jù)類型大小小于原數(shù)據(jù)類型大小,那么用該轉(zhuǎn)換后的指針訪問(wèn)就不會(huì)越過(guò)原數(shù)據(jù)的內(nèi)存,是安全的,否則危險(xiǎn),要越界。
上文中小編為大家詳細(xì)介紹了關(guān)于C語(yǔ)言的指針類型的內(nèi)容,由于精力有限,歡迎指出文中錯(cuò)誤與不足,共勉之!
新聞熱點(diǎn)
疑難解答
圖片精選