typedef和define的一些區別,typedefdefine
#include <stdio.h>#define PINT int*typedef int* pint;/*以下實驗說明了:(1)typedef int* pint; const pint p1=&i1 的效果是和下面的一樣的 int* const p1; 這裡的const鎖住的是(p1),所以p1=&i2都是錯的,因為這裡記憶體位址p1已經被const鎖住,而*p1=其他值是可以的(2)#define PINT int* const PINT p2=&i1 的效果是和下面的一樣的 const int *p2; 這裡const 鎖住的是(*p2);所以*p2賦予其他值是錯誤的,因為這裡值已經被鎖住,而記憶體位址p2是可以賦予其他地址的。(3)pint a,b的效果和int* a;int* b;相同 PINT a,b的效果和int* a;int b相同(4)typedef int* pint; pint const p1=&i1; 的效果和(1)是一樣的;(5)#define PINT int* PINT const p2=&i1; 的效果與(2)剛好相反,也與(1)相同。 總結:由此可見, (1)defined是宏替換,所以替換在編譯之前,如const PINT p2=&i1,PINT const p2=&i1;進行了替換後在編譯的話,編譯的時候就會讓編譯器直接 看到const int *p2以及int* const p2; (2)而關鍵字typedef有種助記符的趕腳,所以在編譯的時候反應比const慢,所以放在哪裡都是先識別const先,變成int* const p1。 (3)嘻嘻,其他差異也可以看看說明的(3)*/void main(){ int i1=30; int i2=40; //const int *p=&i1; const int *p; p=&i1; p=&i2; //此處,p可以在任何時候重新賦值一個新的記憶體位址。 i2=80; //這裡能用*p=80來代替嗎?答案是不能 //*p=30; i1=35; //const pint p1=&i1; pint const p1=&i1; //const PINT p2=&i1; //PINT const p2=&i1; //int* const p3=&i1; //i1=40; //p2=&i2; //*p1=50; //*p2=89; //p1=&i2; //*p3= //i2=90;// printf("%d",*p2); //輸出80}