標(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