整理自:http://www.cnblogs.com/heyonggang/p/3199216.html
定義
1.typedef是用來聲明類型別名的,使用它一般是爲了增加代碼的可讀性,它可以爲一串很長的類型名起一個別名,使用這個別名可以達到與原類型名相同的效果。
typedef int INT;
//以下兩行效果相同
int a;
INT a;
2.#define是一個宏定義命令,用來定義一個常量(包括無參常量和有參常量),它本身並不在編譯過程中執行,而是在預處理階段就已經完成了,因此不作任何正確性檢查,只進行與含義無關的字符串替換。在使用宏定義時要注意括號的使用。
#define ADD(a,b) a+b; //錯誤
//#define ADD(a,b) (a+b); //正確
int sum=ADD(1,2)*3; //1+2*3
區別
1.typedef是C++的關鍵字,用來爲一個已有的數據類型起別名;#define是C++的宏定義命令,用來定義一個宏定義常量。
2.typedef爲一種數據類型起別名,帶有一定含義;#define只做簡單的字符串替換,不表達任何含義。
#define INTPTR1 int*
typedef int* INTPTR2;
INTPTR1 p1,p2;
INTPTR2 p3,p4;
上段代碼中,INTPTR1 p1,p2; 和INTPTR2 p3,p4;兩句作用完全不同:
(1)INTPTR1 p1,p2;進行字符串替換後變成int* p1,p2;表示聲明一個指針變量p1和一個整型變量p2。
(2)INTPTR2 p3,p4;進行字符串替換後變成int* p1,*p2;其中INTPTR2是具有含義的,說明是一個指向整型數據的指針,p3和p4都爲指針變量。