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