C C的typedef的妙用

2021-09-27 13:59:28 字數 2101 閱讀 5836

typedef

int(array)[5

];

array是乙個型別為int長度為5的陣列型別,即定義乙個array a;那麼a就是乙個型別為int長度為5的陣列,所以a的使用方法和陣列一致。

typedef

int(array)[5

];array a;

int i =

0,j =0;

for(i =

0; i <

5; i++

) a[i]

= i;

for(j =

0; j <

5; j++

)printf

("%d,"

, a[j]

);

typedef

char

(*arrayptr)[8

];

arrayptr是乙個指向char型別的長度為8的陣列的指標型別,此型別的指標只能指向char型別的長度為8的陣列。且每一次指標移步,移動的距離是1*8=8位元組。

需要注意的是()不能省略,否則定義就會變義。

除了自定義指標型別來指向乙個固定的陣列外,c還可以直接定義乙個指向固定陣列的指標變數。

int

(*p)[5

];

p就是乙個指向型別為整型且長度為5的陣列的指標變數。

typedef

int(funptr)

(int a,

int b)

;//函式型別

intfun1

(int a,

int b)

void

fun2

(funptr *p)

intmain()

funptr是乙個指向返回值為int引數列表為int,int的函式的型別,通過funptr函式型別的指標可以將返回值為int引數列表為int,int的函式當作引數來使用,使函式的呼叫更為靈活。

除了定義函式型別可以達到這種效果,我們還可以直接定義指向函式的指標型別來實現函式引數化,如:

typedef

int(

*funptr)

(int a,

int b)

;int

fun1

(int a,

int b)

void

fun2

(funptr p)

intmain()

這樣的效果和定義函式型別是一樣的。

當然我們還可以直接定義乙個指向函式的指標變數,來實現同樣的效果,如:

int

fun1

(int a,

int b)

void

fun2

(funptr p)

intmain()

我們還可以這麼做,一樣能達到相同的效果:

int

fun1

(int a,

int b)

void

fun2

(int

(*ptr)

(int a,

int b)

)//直接定義函式指標的形參

intmain()

搞了那麼多似乎函式指標只是把函式的呼叫弄得更複雜了而已,除了把函式當作引數來使用似乎沒有什麼作用了,真的是如此嗎?

如果我們仔細觀察,會發現函式指標將函式的呼叫和函式的實現分隔開來了,即函式指標提前規定好了函式的實現標準,這樣只要後來者按照這個標準來實現函式,可以不用修改前人的**,就能實現函式的完美的呼叫,這一作用在具體的專案迭代中是及其出眾的。

C C 中巨集的妙用

本文總結記錄一些在工作和學習中碰到的一些對c c 巨集的妙用,大都來自於android,chromium,webkit等開源專案 看到好的巨集的使用,本文也會不定時的更新。一.妙用一 減少重複 1.下例,通過巨集的使用,定義了一系列僅僅關鍵字不同的變數和函式,極大的減少了 的重複。這樣對 進行修改 ...

c及c 學習筆記 typedef的妙用

typedef的妙用 typedef給你一種方式來克服 只適合於變數而不適合於型別 的弊端。你可以如下使用typedef typedef char pchar pchar p,q 這裡的 p 和 q 都被宣告為指標。如果不使用 typedef,q 將被宣告為乙個 char 變數,這跟我們的第一眼感 ...

c c 位運算妙用

在vc 程式設計中,會發現微軟的很多api裡面都用到了位運算,比如這個函式 createwindowexa in dword dwexstyle,in opt lpcstr lpclassname,in opt lpcstr lpwindowname,in dword dwstyle,in intx...