關於typedef和define的區別以及用法

2021-04-21 04:46:36 字數 2634 閱讀 5519

兩者的區別:

1) #define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。例如:

#define pi 3.1415926

程式中的:area=pi*r*r 會替換為3.1415926*r*r

如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。

2)typedef是在編譯時處理的。它在自己的作用域內給乙個已經存在的型別乙個別名,但是you cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr; 與 #define int_ptr int * 作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說 ,#define在預處理 時進行簡單的替換,而typedef不是簡單替換 ,而是採用如同定義變數的方法那樣來宣告一種型別。也就是說;

#define int_ptr int *

int_ptr a, b; //相當於int * a, b; 只是簡單的巨集替換

typedef int* int_ptr;

int_ptr a, b; //a, b 都為指向int的指標,typedef為int* 引入了乙個新的助記符

這也說明了為什麼下面觀點成立

typedef int * pint ;

#define pint int *

那麼:

const pint p ;//p不可更改,但p指向的內容可更改

const pint p ;//p可更改,但是p指向的內容不可更改。

pint是一種指標型別 const pint p 就是把指標給鎖住了 p不可更改

而const pint p 是const int * p 鎖的是指標p所指的物件。

3)#define 不是語句 不要在行末加分號,否則 會連分號一塊置換。

typedef的用法:

#include

#include

/* 避免

visual c

的for

與標準for

的不同*/

#definefor

if(0);

elsefor

/* dim(a)

是用於計算

a的維數,不過只能計算陣列的維數,不能計算指標的維數

*/#definedim(a) (sizeof(a)/sizeof(a[0]))

/* n1到n4

是幾個常量,以列舉的形式定義

*/

enum;

/* 這個

c程式設計師都知道,就是將

datatype

定義為int

型,便於擴充

*/

typedefintdatatype;

/* 定義乙個一維陣列,陣列的元素維整型值

*/

typedefdatatype arr1[n4];

/* 再定義乙個一維陣列,陣列的元素維

arr1

型,不過

arr1

又是乙個陣列,所以

* arr2

實際上是乙個矩陣 */

typedefarr1 arr2[n3];

/* 此處完全等價為

typedef int arr2[n3][n4];*/

/* 按照arr2

的解釋,

arr3

也是乙個一維陣列,不過陣列元素的型別是

arr2

的型別

* 所有

arr3

是乙個三維陣列 */

typedefarr2 arr3[n2];

/* 此處完全等價為

typedef int arr3[n2][n3][n4];*/

/* 分別用定義好的

arr1

,arr2

,arr3

定義三個變數

a, b, c */

arr1 a;

/* 此處完全等價於:

int a[n4]; */

arr2 b;

/* 此處完全等價於:

int b[n3][n4]; */

arr3 c;

/* 此處完全等價於:

int c[n2][n3][n4]; */

/* 下面函式給大家個示例看

a,b,c

如何使用

*/

voidexam_1()

printf("/nthe c is:/n");

for(inti=0; i

printf("/n");}}

/* 下面函式給大家演示陣列在記憶體中的排列

*/

voidexam_2()

intmain(intargc,char* argv)

C語言中typedef的用法和 define區別

typedef 型別定義 typedef 是給各種資料型別定義新名字,主要是用來簡潔的表示一些複雜的資料型別,比如說指向其他物件指標之類 defined也有這個意思,但是define巨集只是進行一種簡單的替換。普通的變數宣告方式,比如 宣告乙個字元型變數 char c 宣告乙個字元型指標變數為 ch...

糾結的const(static) 和 define

const static 和 define 在開發中常用來定義常量,這樣做的好處是 使 更易維護 提高 的效率。1 const static const是c c 中的乙個關鍵字 修飾符 const一般用來定義乙個常量,既然叫做常量,即以後再也不能修改其值。const 定義常量時,編譯器通常不為普通c...

關於typedef的用法

在計算機程式語言中用來為複雜的宣告定義簡單的別名,與巨集定義有些差異。它本身是一種儲存類的關鍵字,與auto extern mutable static register等關鍵字不能出現在同乙個表示式中。typedef宣告,簡稱typedef,為現有型別建立乙個新的名字,或稱為型別別名,在 結構體定...