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...