Typedef の使用法: 1. Typedef の基本データ型は「エイリアス」を取得します。C 言語のすべてのデータ型は typedef を使用して型名を再定義できます。2. Typedef はカスタム データ型の「エイリアス」を取得します。カスタマイズされたデータ型include: 構造体構造体名 { };、共用体ユニット名 { };、列挙 enum { }; 3. Typedef は配列の「エイリアス」を受け取ります; 4. Typedef はポインタの「エイリアス」を受け取ります。
#この記事の動作環境: Windows 10 システム、C 20 バージョン、dell g3 コンピューター。
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
struct students{ char sex; char name[120]; int ages;};
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;
int a=2;typedef int* pointer;pointer p;p=&a;
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
最初のステップ: ポインターに「エイリアス」を与える
pCopySDMMC2Mem p1;pBL2Type p2;
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
typedef static int INT_STATIC;
(1)typedef所建立的符號名稱只限於類型,不限於值
(2)typedef由編譯器解釋,不是預處理器
在實際應用中,typedef主要有以下四種用法:
也就是說,C語言中的所有資料型別都可以用typedef關鍵字來重新定義型別名
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
自訂的資料型別包括:結構體struct name{ }; 、共用體unit name { };、枚舉enum { };
struct students{ char sex; char name[120]; int ages;};
結構體重新定義資料名常用的方法有:
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
另外也可以用typedef定義:
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;
等同於:
int a=2;typedef int* pointer;pointer p;p=&a;
如果a的資料型別是char ,即char a =2;那麼,
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
其實上面程式執行了兩步驟:
第一步:給指標取「別名」
pCopySDMMC2Mem p1;pBL2Type p2;
第二步:強制型別轉換
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
第三步:給指標賦值
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
小結:使用typedef時,typedef並沒有建立任何新類型,它只是為某個已經存在的類型提供一個“別名”,以便在程式中使用。
接下來看一個簡單的typedef 使用範例,如下面的程式碼所示:
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
在上面的程式碼中,「const PCHAR」 是否相當於「const char*」 呢?
答案是否定的,原因很簡單,typedef 是用來定義一種類型的新別名的,它不同於宏,不是簡單的字串替換。因此,「const PCHAR」中的 const 給予了整個指標本身常數性,也就是形成了常數指標「char* const(一個指向char的常數指標)」。即它實際上相當於“char* const”,而不是“const char*(指向常數 char 的指標)”。當然,要讓const PCHAR 相當於const char* 也很容易,如下面的程式碼所示:
typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
其實,無論什麼時候,只要為指標宣告typedef,那麼就應該在最終的typedef 名稱中加一個const,以使得該指標本身是常數。
還需要特別注意的是,雖然typedef 並不真正影響物件的儲存特性,但在語法上它還是一個儲存類別的關鍵字,就像auto、extern、static 和register 等關鍵字一樣。因此,像下面這種聲明方式是不可行的:
typedef static int INT_STATIC;
不可行的原因是不能聲明多個儲存類別關鍵字,由於typedef 已經佔據了儲存類別關鍵字的位置,因此,在typedef聲明中就無法再使用static 或任何其他儲存類別關鍵字了。當然,編譯器也會報錯,如在 VC 2010 中的報錯資訊為「無法指定多個儲存類別」。
以上がtypedef の用途は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。