<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 typedef為c語言的關鍵字,作用是為一種數據類型(基本類型或自定義數據類型)定義一個新名字,**不能創建新類型**. * 與define不同,typedef僅限于數據類型,而不是表達式或具體的值 * define發生在預處理,typedef發生在編譯階段 ~~~ struct studentsInfoList { char name[20]; char sex; }; typedef struct studentsInfoList sinfo; int main() { sinfo s1; return 0; } ~~~ 這樣是2個`char*`類型的 ~~~ #include <iostream> typedef char * PCHAR; int main() { // char * p1, p2; PCHAR p1, p2; std::cout << typeid(p1).name() << std::endl; std::cout << typeid(p2).name() << std::endl; return 0; } ~~~ 允許為一個數據類型起一個新的別名,就像給人起“綽號”一樣。 起別名的目的不是為了提高程序運行效率,而是為了編碼方便。例如有一個結構體的名字是 stu,要想定義一個結構體變量就得這樣寫: ~~~ struct stu stu1; ~~~ struct 看起來就是多余的,但不寫又會報錯。如果為 struct stu 起了一個別名 STU,書寫起來就簡單了: ~~~ STU stu1; ~~~ 這種寫法更加簡練,意義也非常明確,不管是在標準頭文件中還是以后的編程實踐中,都會大量使用這種別名。 使用關鍵字**typedef**可以為類型起一個新的別名。typedef 的用法一般為: ~~~ typedef ?oldName ?newName; ~~~ oldName 是類型原來的名字,newName 是類型新的名字。例如: ~~~ typedef int INTEGER; INTEGER a, b; a = 1; b = 2; ~~~ `INTEGER a, b;`等效于`int a, b;` typedef 還可以給數組、指針、結構體等類型定義別名。先來看一個給數組類型定義別名的例子: ~~~ typedef char ARRAY20[20]; ~~~ 表示 ARRAY20 是類型`char [20]`的別名。它是一個長度為 20 的數組類型。接著可以用 ARRAY20 定義數組: ~~~ ARRAY20 a1, a2, s1, s2; ~~~ 它等價于: ~~~ char a1[20], a2[20], s1[20], s2[20]; ~~~ 注意,數組也是有類型的。例如`char a1[20];`定義了一個數組 a1,它的類型就是 char \[20\]中講解過。 又如,為結構體類型定義別名: ~~~ typedef struct stu{ char name[20]; int age; char sex; } STU; ~~~ STU 是 struct stu 的別名,可以用 STU 定義結構體變量: ~~~ STU body1,body2; ~~~ 它等價于: ~~~ struct stu body1, body2; ~~~ 再如,為指針類型定義別名: ~~~ typedef?int (*PTR_TO_ARR)[4]; ~~~ 表示 `PTR_TO_ARR` 是類型`int * [4]`的別名,它是一個二維數組指針類型。接著可以使用 `PTR_TO_ARR` 定義二維數組指針: ~~~ PTR_TO_ARR p1, p2; ~~~ 按照類似的寫法,還可以為函數指針類型定義別名: ~~~ typedef int (*PTR_TO_FUNC)(int, int); PTR_TO_FUNC pfunc; ~~~ # typedef 和 `#define` 的區別 typedef 在表現上有時候類似于 #define,但它和宏替換之間存在一個關鍵性的區別。正確思考這個問題的方法就是把 typedef 看成一種徹底的“封裝”類型,聲明之后不能再往里面增加別的東西。 1) 可以使用其他類型說明符對宏類型名進行擴展,但對 typedef 所定義的類型名卻不能這樣做。如下所示: ~~~ #define INTERGE int unsigned INTERGE n; ?//沒問題 typedef int INTERGE; unsigned INTERGE n; ?//錯誤,不能在 INTERGE 前面添加 unsigned ~~~ 2) 在連續定義幾個變量的時候,typedef 能夠保證定義的所有變量均為同一類型,而 #define 則無法保證。例如: ~~~ #define PTR_INT int * PTR_INT p1, p2; ~~~ 經過宏替換以后,第二行變為: ~~~ int *p1, p2; ~~~ 這使得 p1、p2 成為不同的類型:p1 是指向 int 類型的指針,p2 是 int 類型。 相反,在下面的代碼中: ~~~ typedef int *?PTR_INT PTR_INT p1, p2; ~~~ p1、p2 類型相同,它們都是指向 int 類型的指針。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看