在微控制器和作業系統中 typedef 會經常用到,它可以為某乙個型別自定義名稱。和#define比較類似。但是又有不同的地方。
下面使用typedef定義乙個資料型別
int main()
使用typedef將unsigned char型別重新定義為byte型別,然後在使用新的型別byte定義乙個變數c。輸出結果如下:
此時如果使用 #define 來替換,好像也可以。
這裡使用 #define 將unsigned char替換為 byte好像也正確。
下面在看乙個例子。
int main()
將字元指標 char * 重新定義為str型別,然後使用str定義兩個指標s1和s2,這樣s1和s2都是指向字元的指標。接著給這兩個指標賦值,然後列印出來。
這時使用 #define 來替換 typedef 的功能。
#define str char *
int main()
這時候編譯程式的時候,程式會報錯。
這時為什麼呢?因為使用typedef的時候,是定義了乙個新的資料型別。
typedef char * str;
str s1,s2;
相當於char *s1, *s2;
s1="abc";
s2="123";
s1和都是指向字元型別的指標。
如果使用 #define 的時候,系統只是簡單的替換。
#define str char *
str s1,s2;
將str用 char * 進行替換
char *s1,s2;
s1="abc";
s2="123";
替換後只有s1是指標,s2依然是乙個char型別的變數。所以給s2賦值乙個字串的時候系統就會報錯。因此要重新定義乙個資料型別的時候,要使用typedef,這個在定義結構體的時候使用的非常多。
typedef struct date
dt;使用typedef 將結構體 struct date 重新定義為dt型別,這樣在使用dt定義變數的時候,就相當於使用了 struct date 來定義變數。
typedef struct date
dt;dt d1 = ;
dt d2 = ;
等價於struct date
;struct date d = ;
struct date d2 = ;
www.cppcns.com
這樣通過使用 typedef 來重新定義乙個新的型別,使**寫起來更加的簡潔。這種方法在微控制器的庫函式中使用的最多。
typedef struct
gpio_inittypedef;
void led_init(void)
通過 typedef 將結構體重定義為gpio_inittypedef 型別,這樣在初始化的時候,直接使用gpio_inittypedef 型別就可以定義乙個關於gpio的結構體。
在定義資料型別的時候,也會用到 typedef 重新定義乙個資料型別。
通過tepedef 定義新的資料型別,增加了**的可讀性和移植性。這裡說的新的資料型別不是建立了乙個系統不存在的資料型別,而是給已經存在的某個型別增加了乙個方便使用的標籤。而這個標籤又不同於 #define 只是簡單的符號替換。
總結
C 語言入門學習筆記
c 語言入門學習筆記 一 c 是什麼 c 讀作 c sharp 是一種程式語言,它是為生成在 net framework 上執行的各種應用程式而設計的。c 簡單 功能強大 型別安全,而且是物件導向的。c 憑藉在許多方面的創新,在保持 c 語言風格的表現力和雅緻特徵的同時,實現了應用程式的快速開發。v...
C語言入門學習筆記(二)
任何乙個c語言程式 都必須包括以下格式 main 括號內可以不填,就不執行程式 2.任何乙個c程式都是從main函式開始.main 函式 c語言中的主函式 乙個c程式中有且僅有乙個main函式 main 函式後的圓括號不可省略 大括號裡的內容是main 函式的函式體,是計算機的執行內容.4.裡每乙個...
C語言入門筆記之迴圈結構
迴圈結構的功能是讓計算機重複地執行相同的操作 c語言中的各種迴圈結構for迴圈是比較常用的一種迴圈,一般形式是for 一般表示式 條件表示式 末尾迴圈體 執行邏輯 例子 在螢幕上列印1 2 3 4 5 99 100 include int main return 0 while 條件語句 執行邏輯 ...