一,typedef關鍵字
1,C語言中的類型一共有兩種:一種是編譯器定義的原生類型(基礎資料類型,比如int char float double);第二種是使用者自定義的類型,不是語言自帶的而是程式員自己定義的(比如數組指針、指針數組、函數指針、結構體類型、函數類型等)。
2,有時候自定義類型太長了,用起來不友善,所有用typedef給它重命名一個短點的名字。
3,需要注意的是,typedef是給類型重命名,也就是typedef加工出來的是資料類型,而不是變量(不會配置設定記憶體)。類型是一個資料模闆,變量是一個實在的資料。類型是不占記憶體的,而變量是要占記憶體的。
二,typedef與#define的差別
typedef char * TYPcahr;
#define DEPchar char *
#include<stdio.h>
typedef char * TYchar;
#define DEchar char *
int main(void)
{
TYchar p1,p2; //相當于 char *p1;char *p2
DEchar p3,p4; //相當于 char *p3,p4; char *p3;char p4
char c = 0;
p1 = &c;
p2 = &c;
p3 = &c;
p4 = &c; //類型不比對
p4 = c;
}
三,typedef和結構體
1,結構體在使用時都是先定義結構體類型,再用結構體類型去定義變量。
2,C語言文法規定,結構體類型使用時必須是struct+結構體類型名+結構體變量名;這樣的方式來定義變量。
3,使用typedef一次定義兩個類型,分别是結構體變量類型,和結構體變量指針類型。
四,tpyedef和const
typedef int *PINT;
1,const PINT p2; 實際的意思并不是 const int *p2,而是int *const p2;
2,PINT const p2;相當于 int *const p2;
3,要想定義 const int *p2; 隻能typedef const int * CPINT; CPINT p2;
五,typedef和函數指針
比如 char *strcpy(char *dest,const char *src)的函數指針。
typedef char *( *Pstrcpy)(char *,const char *);
Pstrcpy p1; //p1是一個指向strcpy函數類型的指針
Pstrcpy p2; //p2是一個指向strcpy函數類型的指針
#include<stdio.h>
#include<string.h>
typedef char *(*Pstrcpy)(char *,const char *);
int main(void)
{
char a[32] = {0};
char b[32] = {0};
Pstrcpy p1,p2;
p1 = strcpy;
p2 = strcpy;
p1(a,"hello world");
p2(b,"hello world");
printf(" a = %s \n",a); //hello world
printf(" b = %s \n",b); //hello world
}