typedef 與define一些差異

2021-07-02 11:39:25 字數 933 閱讀 9379

#include

#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()

define與typedef一樣嗎?

1.define是什麼?define為一巨集定義語句,通常用它來定義常量 包括無參量與帶參量 以及用來實現那些 貌似簡單 實際複雜 的巨集。define並不在編譯過程中進行,而是在這之前 預處理過程 就已經完成了,實際上是簡單的替代。類似於word中的查詢且替代的操作。由於只是簡單的替代,因此難以發...

typedef與 define 的區別

一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typedef可以增強程式的可讀性,以及識別符號的靈...

typedef與 define 的區別

typedef與 define 的區別 一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typede...