單純對typedef的小總結,如下:
C語言中一些關於typedef的歸納
typedef 的一般使用:
typedef允許你為各種資料型別定義新名字。
typedef 如何宣告:
typedef宣告的寫法和普通的宣告基本相同,只是把typedef這個關鍵字出現在宣告的前面。
例如:
cptr_to_char a;
char b = "m";
a = &b;
printf("%c\n",*a);//輸出m
這個宣告把ptr_to_char作為指向字元的指標型別的新名字,宣告a是一個指向字元的指標。
這樣宣告的好處:使用typedef宣告型別可以減少使宣告變得冗長的危險。
Attention
你應該使用typedef而不是#define來建立新的型別名,因為後者無法正確地處理指標型別。
d _ptr_to_char a,b;
char c = "l";
a = &c;
b = "h";
printf("%c\n",*a);//輸出l
printf("%c\n",b);//輸出h
正確地聲明瞭a,但是b卻被宣告為一個字元。在定義更為複雜的型別名時,如果函式指標或指向陣列的指標,使用typedef更為合適。
typedef 在結構體中的使用
我們首先來看一個typedef與struct結合使用的例子:
typedef struct TagNode
{
int age;
char name[20];
char *address;
struct TagNode *next;
}Node,*pNode;
上面的程式碼實際完成了兩個操作:
1.定義了一個新的結構體型別
struct TagNode
}
其中TagNode稱為"Tag",即標籤,實際上是一個臨時名字,struct關鍵字和TagNode一起,構成了這個結構型別,不論是否有typedef,這個結構都存在。我們可以用struct TagNode來定義變數,但要注意,使用TagNode來定義變數是不對的,因為struct和TagNode合在一起才能表示一個結構型別。
2.typedef為這個結構起了新的名字,叫Node和*pNode。因此,我們可以直接使用Node來定義該結構體型別變數,使用pNode來定義指向該結構體型別的指標變數。
int main()
Node lhk = {19,"Robert"};
pNode p;
lhk.address = (char*)malloc(80);//表示查詢可用連續80個位元組記憶體的空間賦給address儲存地址。 p = &lhk;//後續引用結構體成員時,以(*p).age形式引用。
...
吐槽一點,回答區不能直接貼上markdown格式文字,很難受。
歸納於2017.9.9.23.08
單純對typedef的小總結,如下:
C語言中一些關於typedef的歸納
typedef 的一般使用:
typedef允許你為各種資料型別定義新名字。
typedef 如何宣告:
typedef宣告的寫法和普通的宣告基本相同,只是把typedef這個關鍵字出現在宣告的前面。
例如:
cptr_to_char a;
char b = "m";
a = &b;
printf("%c\n",*a);//輸出m
這個宣告把ptr_to_char作為指向字元的指標型別的新名字,宣告a是一個指向字元的指標。
這樣宣告的好處:使用typedef宣告型別可以減少使宣告變得冗長的危險。
Attention
你應該使用typedef而不是#define來建立新的型別名,因為後者無法正確地處理指標型別。
例如:
d _ptr_to_char a,b;
char c = "l";
a = &c;
b = "h";
printf("%c\n",*a);//輸出l
printf("%c\n",b);//輸出h
正確地聲明瞭a,但是b卻被宣告為一個字元。在定義更為複雜的型別名時,如果函式指標或指向陣列的指標,使用typedef更為合適。
typedef 在結構體中的使用
我們首先來看一個typedef與struct結合使用的例子:
typedef struct TagNode
{
int age;
char name[20];
char *address;
struct TagNode *next;
}Node,*pNode;
上面的程式碼實際完成了兩個操作:
1.定義了一個新的結構體型別
struct TagNode
{
int age;
char name[20];
char *address;
struct TagNode *next;
}
其中TagNode稱為"Tag",即標籤,實際上是一個臨時名字,struct關鍵字和TagNode一起,構成了這個結構型別,不論是否有typedef,這個結構都存在。我們可以用struct TagNode來定義變數,但要注意,使用TagNode來定義變數是不對的,因為struct和TagNode合在一起才能表示一個結構型別。
2.typedef為這個結構起了新的名字,叫Node和*pNode。因此,我們可以直接使用Node來定義該結構體型別變數,使用pNode來定義指向該結構體型別的指標變數。
例如:
typedef struct TagNode
{
int age;
char name[20];
char *address;
struct TagNode *next;
}Node,*pNode;
int main()
{
Node lhk = {19,"Robert"};
pNode p;
lhk.address = (char*)malloc(80);//表示查詢可用連續80個位元組記憶體的空間賦給address儲存地址。 p = &lhk;//後續引用結構體成員時,以(*p).age形式引用。
...
}
吐槽一點,回答區不能直接貼上markdown格式文字,很難受。
歸納於2017.9.9.23.08