標(biāo)題:
強(qiáng)制類型轉(zhuǎn)換 類型的本質(zhì) 指針的本質(zhì) 函數(shù)指針
[打印本頁]
作者:
51黑黑黑
時間:
2016-2-13 00:50
標(biāo)題:
強(qiáng)制類型轉(zhuǎn)換 類型的本質(zhì) 指針的本質(zhì) 函數(shù)指針
昨天給朋友講了 3個問題,
A〉什么是函數(shù)指針,本質(zhì)是?指針的本質(zhì)?
B〉什么是類型,類型的本質(zhì)是?
C〉什么是強(qiáng)制類型轉(zhuǎn)換,本質(zhì)是?作者 張世光 億通科技軟件部 060913 QQ:87895224 MSN:Z_55@hotmail.com
A〉什么是函數(shù)指針,本質(zhì)是?指針的本質(zhì)?
如
voidfun(); //函數(shù)聲明
void(*ptrfun)();//函數(shù)指針變量ptrfun 的聲明,表明ptrfun這個指針指向一個 voidfun()函數(shù)類型的函數(shù)地址。
〉函數(shù)的名字 代表函數(shù)的地址;
所以,可以這樣
ptrfun =fun ;//給ptrfun賦值。此時,ptrfun 就是 fun函數(shù)的別名;
在需要調(diào)用 fun()的地方,可以這樣寫
(*ptrfun)(); //等同于 fun();//這就是別名的意義。
指針的本質(zhì)是一個固定長度(32位系統(tǒng)上是4個byte)的空間中放置的內(nèi)容是一個內(nèi)存地址
。
而指針類型的本質(zhì)就是對這個地址的解釋方式。不同的指針類型,對即使相同的內(nèi)存地址的解釋是不同的,受影響的空間大小也不同。受影響的空間的大小等于sizeof(類型)。
如 short i=0x1234;
short * psort = &i;
char *pchar = &i; //此時pshort ==pchar;即指向了同一個地址;
那么 (*pshort) 和 (*pchar)的值各是什么?
假設(shè) sizeof(short)==2
sizeof(char)==1
假如內(nèi)存中這樣:
---地址 0x1000--
| 0x34 |
----------------
| 0x12 |
----------------
那么,psort==0x1000 ,同時,pchar==0x1000 ;
那么,(*psort) 代表是 地址0x1000 和 0x1001這兩個字節(jié)的內(nèi)容; <-----由其類型決定
(*pchar)代表 地址0x1000這一個字節(jié)的內(nèi)容; <<-----由其類型決定
B〉什么是類型,類型的本質(zhì)是?
類型是我們?yōu)榱朔奖阌行Ю脙?nèi)存來表達(dá)我們的意思而作的語言上的區(qū)分,看上面的解釋就可以了解為何有類型區(qū)分。這里我想講另一個類型相關(guān)問題。
有人問 TypeDef void (*PtrFun)();
和 void (*ptrfun)(); 有什么區(qū)別?
看使用方式,
PtrFun pfun;
void fun();
pfun = ptrfun = fun;
由上面可以看出 PtrFun是類型,而ptrfun是一個變量 。
使用方式自然也有差別,PtrFun 用來定義函數(shù)指針變量。而ptrfun已經(jīng)是一個函數(shù)指針變量,可以直接賦值使用。
(*pfun)();
(*ptrfun)(); //
C〉什么是強(qiáng)制類型轉(zhuǎn)換,本質(zhì)是?
強(qiáng)制類型轉(zhuǎn)換 的本質(zhì)是程序員告訴編譯器“你不用擔(dān)心,這里的類型變化是正確的”。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1