C語言複雜的宣告(陣列指標和函式指標)

2021-10-09 16:23:45 字數 2837 閱讀 5956

int a[8]

[8];

//乙個內含int陣列的陣列

int*

* ptr;

//指向指標的指標,被指向的指標指向int

int* b[10]

;//指標陣列,內含10個元素的陣列,每個元素都是指向int型別的指標

int(

* b)[10

];//陣列指標,乙個指向陣列的指標,該陣列有10個int型別的值

int* c[3]

[4];

//二維指標陣列,每個元素都是指向int型別的指標

int(

* d)[3

][4]

;//乙個指向二維陣列的指標,該陣列中含int型別值

int(

* d[3]

)[4]

;//乙個內含三個指標元素的陣列,每個指標都指向乙個內含4個int型別元素的陣列。

要看懂上述宣告,關鍵要理解 * 、()、和 [ ] 的優先順序:

char*a

(int);

//指標函式,首先是乙個函式,返回值為char型別的指標

char

(* b)

(int);

//函式指標,首先是個指標,它指向函式,該函式的返回型別為char

char (* c[3]

)(int);

//內含三個指標的陣列,每個指標都指向乙個返回值為char型別的函式。

通常,函式指標用作另乙個函式的引數,告訴函式要使用哪乙個函式。

函式指標:指向函式的指標。函式也有位址,因為函式的機器語言實現由載入記憶體的**組成,指向函式的指標儲存著函式**的起始位置的位址。

函式原型:

void

toupper

(char*)

;//帶char * 型別引數、返回型別是void的函式

指向該函式的指標:

void

(*pf)

(char*)

;//pf是指向函式的指標

把函式名toupper替換成表示式(pf)是建立指向函式指標最簡單的方式。所以 想宣告乙個指向某型別函式的指標,可以先寫出該函式的原型,然後再把函式名用(*pf)替換即可 。

void

toupper

(char*)

;void

tolower

(char*)

;int

round

(double);

void

(*pf)

(char*)

;pf = toupper;

//有效,toupper是該型別函式的位址

pf = tolower;

//有效,tolower是該型別函式的位址

pf = round;

//無效,round不是該型別函式的位址

pf =

tolower

(); //無效,tolower()不是位址

//函式指標

#include

#include

#include

#define len 81

char

*s_gets

(char

* st,

int n)

;char

showmenu

(void);

void

eatline

(void);

//讀取至行末尾

void

show

(void

(*fp)

(char*)

,char

* str)

;void

toupper

(char*)

;void

tolower

(char*)

;void

transpose

(char*)

;void

dummy

(char*)

;int

main

(void

)strcpy

(copy,line)

;show

(pfun, copy);}

puts

("enter a string (empty line to quit):");

}puts

("bye!");

return0;

}char

showmenu

(void

)return ans;

}void

eatline

(void

)void

toupper

(char

* str)

}void

tolower

(char

* str)

}void

transpose

(char

* str)

}void

dummy

(char

* str)

void

show

(void

(*fp)

(char*)

,char

* str)

char

*s_gets

(char

* st,

int n)

return ret_val;

//輸入正常則返回字串首字元位址

}

Linux C函式,陣列,指標,複雜宣告

函式的遞迴呼叫 遞迴函式是指 自己呼叫自己 的函式,函式不可能不停的呼叫自己,所以遞迴函式一定具備結束條件 例一 遞迴函式binary search 實現二元搜尋演算法,在排序好的陣列中找到特定元素。首先,該函式根據搜尋條件比較陣列中間的元素,相同就返回該元素指標,不同該函式呼叫自己,在可能的另一半...

幫你理解複雜的指標函式陣列的宣告

1 int func int 定義乙個函式,該函式返回值int,接受乙個int型引數 結合順序為 func int int func int 2 int return pointer array func1 int 10 return pointer array func1返回指標陣列的函式,結合順...

C語言複雜指標宣告應如何閱讀

參考 http www.diybl.com course 3 program c cppsl 2008217 100104.html the right left rule start reading the declaration from the innermost parentheses,go...