<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] ## 給類型起別名 起別名的目的不是為了提高程序運行效率,而是為了編碼方便。例如有一個結構體的名字是 stu,要想定義一個結構體變量就得這樣寫: ``` struct stu stu1; ``` 使用關鍵字**typedef**可以為類型起一個新的別名,語法格式為: ``` typedef ?oldName ?newName; ``` oldName 是類型原來的名字,newName 是類型新的名字。例如: ``` typedef int INTEGER; INTEGER a, b; a = 1; b = 2; ``` ### 給數組起別名 給數組類型定義別名的例子 ``` 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 ### 給結構體起別名 為結構體類型定義別名: ``` 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; ``` 【示例】為指針定義別名。 ``` #include <stdio.h> typedef char (*PTR_TO_ARR)[30]; typedef int (*PTR_TO_FUNC)(int, int); int max(int a, int b){ return a>b ? a : b; } char str[3][30] = { "ceshi", "hello world", "ddd" }; int main(){ PTR_TO_ARR parr = str; PTR_TO_FUNC pfunc = max; int i; printf("max: %d\n", (*pfunc)(10, 20)); for(i=0; i<3; i++){ printf("str[%d]: %s\n", i, *(parr+i)); } return 0; } ``` ## 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>

                              哎呀哎呀视频在线观看