typedef:用來爲複雜的聲明定義簡單的別名,它與宏定義有些差異(注意行末加;)。它本身是一種存儲類的關鍵字,與auto、extern、mutable、static、register等關鍵字不能出現在同一個表達式中。
struct:它是由若干“成員”組成的結構,用作定義結構體類型。
介紹幾種typedef和struct的組合方式:
1.從最基礎開始
//日常定義一個結構體
struct testa
{
int a;
int b;
int c;
};
struct testa a;
//當使用typedef後
typedef struct testa TEST;
struct testa
{
int a;
int b;
int c;
};
TEST a;
//甚至你可以這樣,表達的意思是一樣,區分類型struct TEST和標籤TEST
typedef struct TEST TEST;
struct TEST
{
int a;
int b;
int c;
};
TEST a;
2.精簡一下
typedef struct testa
{
int a;
int b;
int c;
}TEST;
TEST a;
3.然後你或許會發現,struct關鍵字後的 標籤 貌似沒有實際作用
typedef struct
{
int a;
int b;
int c;
}TEST;
TEST a;
這樣的編譯是通過的,但是這樣定義的結構體和一般的結構體變量的區別就是:
1、他不能作爲參數傳遞給一個函數,因爲編譯器無法對他進行類型檢查;
2、也不能使被調用的函數返回一個沒有結構體名的結構體變量,原因同1。
引用:https://bbs.csdn.net/topics/41141