<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【C語言天天練(三)】typedef具體解釋

      引言:

              typedef能夠看作type define的縮寫,顧名思義就是類型定義,也就是說它僅僅是給已有的類型又一次定義了一個方便使用的別名。并沒有產生新的數據類型。


      typedef與define的不同 ★★★★

      1.與#define不同,typedef給出的符號名稱僅限于對類型,而不是對值。

      2.typedef的解釋由編譯器,而不是預處理器運行。

      3.typedef比#define更靈活。


      typedef的優勢★★★

      1.它使得定義更加直觀,從定義就可了解變量的某些信息。如

             typedef unsigned int BYTE;

             BYTE x, y[10], *z;

      2.它能夠使程序參數化,以提高程序的可移植性。如

      time_t time(time_t *); 該函數返回的是time_t 類型的返回值。有些系統中 time_t 被定義為unsigned long類型,而另外一些系統中,可能被定義為unsigned int 類型。這樣,在移植到不同的系統中時,僅僅要改變typedef定義,就能夠在不同的系統中進行移植了。

      3.表達方式更加簡潔。如

      使用typedef命名一個結構體時。

      typedef struct{

            double x; 

            double y;

      }rect; 

      rect r1 = {3.0, 6.0};

      假設不使用typedef則顯得復雜。

      struct {

             double x; 

             double y;

      }r1 = {3.0, 6.0};


      注意事項★★★★

             1、使用typedef定義的作用域取決于typedef語句所在的位置,假設定義是在一個函數內部,它的作用域就是局部的,限定在那個函數里。

      假設定義是在函數外部。它將具有全局作用域。

             2、typedef中聲明的類型在變量名的位置出現。而不是緊接在keywordtypedef之后。

             3、typedef在語法上類似于存儲類中的extern、static等,所以不能同一時候對一個變量類型使用typedef和static等。

             4、建立好數據類型名之后,能夠使用它來進行類型聲明、類型轉換等。如:

             typedef char *String;

             String p, lineptr[MAXLINES], alloc(int); //類型聲明

             int strcmp(String, String); 

             p = (String)malloc(100); //類型轉換


      typedef的經常使用范比例如以下:★★★

      1.簡單的定義變量的別名。

           typedef char * PChar;

           PChar a, b; //相當于char *a; char *b;

      2.與結構體的結合使用。

      typedef struct Node{

             int a;

             char *b;

      }*PNode;

      PNode a, b;

      3.對復雜的變量定義一個類型別名。

            typedef int  (*PF) (const char *, const char *)。這個聲明引入了 PF 類型作為函數指針的同義字。該函數有兩個 const char * 類型的參數以及一個 int 類型的返回值。對復雜變量建立一個類型別名的方法非常easy,你僅僅要在傳統的變量聲明表達式里用類型名替代變量名。然后把keywordtypedef加在該語句的開頭即可了。

      比方:

             void (*signal (int signr,void (*handler)(int))) (int);能夠通過兩次typedef來進行定義。

             typedef void sigfunc(int);

             sigfunc *signal(int signr,sigfunc *handler);

             當中typedef定義了一個有一個整型參數無返回值的函數類型。

      void (*handler)(int)表示一個有一個整型參數無返回值的函數指針。這個指針名為handler,所以其能夠用sigfunc進行說明,此時sigfunc就相當于前面的int signr中int的作用;同理這個函數也是這樣。


      分析復雜聲明的方法★★★

      理解復雜聲明可用的“右左法則”:從變量名看起,先往右,再往左。碰到一個圓括號就調轉閱讀的方向;括號內分析完就跳出括號。還是按先右后左的順序。如此循環,直到整個聲明分析完。舉例: 
             1、int (*func)(int *p); 
             首先找到變量名func,外面有一對圓括號,并且左邊是一個*號,這說明func是一個指針;然后跳出這個圓括號,先看右邊,又遇到圓括號,這說明(*func)是一個函數。所以func是一個指向這類函數的指針,即函數指針,這類函數具有int*類型的形參,返回值類型是int。

       
              2、int (*func[5])(int *); 
              func右邊是一個[]運算符,說明func是具有5個元素的數組。func的左邊有一個*,說明func的元素是指針(注意這里的*不是修飾func,而是修飾func[5]的。原因是[]運算符優先級比*高,func先跟[]結合)。跳出這個括號。看右邊。又遇到圓括號,說明func數組的元素是函數類型的指針,它指向的函數具有int*類型的形參,返回值類型為int。 

      參考:

      http://blog.csdn.net/shadow_gz/article/details/4326106

      http://blog.163.com/njut_wangjian/blog/static/165796425201232510265243/


      posted @ 2017-08-21 12:00  lytwajue  閱讀(1460)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 东京热人妻丝袜无码AV一二三区观| 97免费人妻在线视频| 一面膜上边一面膜下边视频| 国产精品一线天在线播放| 免费国产va在线观看| 国产亚洲欧美另类一区二区| 国产三级精品三级色噜噜| 国产成人综合在线女婷五月99播放 | 亚洲av本道一区二区| 亚洲成av人片无码迅雷下载| 国产高清无遮挡内容丰富| 成人国产精品日本在线观看| 麻豆a级片| 成人网站免费观看永久视频下载| 静乐县| 国产精品天堂蜜av在线播放 | 国产高清av首播原创麻豆| 国产精品一区二区传媒蜜臀| 四虎永久精品在线视频| 亚洲高清免费在线观看| 日本人成精品视频在线| AV教师一区高清| 精品综合久久久久久98| 武功县| 久久久久免费看成人影片| 国产AV午夜精品一区二区三区| 色8久久人人97超碰香蕉987| 欧美做受视频播放| 日韩免费无码视频一区二区三区| 一本av高清一区二区三区| 太康县| 国产精品无码专区av在线播放| 国产gaysexchina男外卖| 亚洲国产精品区一区二区| 五月综合网亚洲乱妇久久| 新昌县| 国产精一区二区黑人巨大| аⅴ天堂国产最新版在线中文| 少妇人妻av毛片在线看| 亚洲国产高清第一第二区| 国产自拍一区二区三区在线|