函式指標是指向函式的指標變數。 因而「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。函式指標有兩個用途:呼叫函式和做函式的引數。
函式指標的宣告方法為:返回值型別 (*指標變數名)([形參列表]);
指標變數名 = 函式名;此處的函式名應該是與函式指標的定義中擁有相同的返回值型別, 形參列表的.
例: 按照不同的排序方式對結構體進行排序.
function.h
struct student ;
typedef
struct student student;
typedef
bool (*sort)(student s1, student s2);//對函式指標起別名
void printstudent(student stu, int count);
void sortstudentarray(student *stus, int count, sort p);
bool cmpbynameasc(student s1, student s2);//按照姓名公升序排序
bool cmpbyageasc(student s1, student s2);//按照年齡公升序排序
bool cmpbynamedes(student s1, student s2);//按照姓名降序排序
function.m
void printstudent(student stu, int count)
}void sortstudentarray(student *stus, int count, sort p) }}
}bool cmpbynameasc(student s1, student s2)
bool cmpbyageasc(student s1, student s2)
bool cmpbynamedes(student s1, student s2)
main.m
//定義結構體陣列,包含五個元素
student stus = ,,,
,};
//元素個數
intcount = sizeof(stus) / sizeof(student);
/*//輸出結構體陣列
printstudent(stus, count);
findstudentbyscore(stus, count, addstr);
printf("驗證:\n");
printstudent(stus, count);
*///動態排序:
//周一, 姓名降序
printf("周一, 姓名降序:\n");
sortstudentarray(stus, count, cmpbynamedes);
printstudent(stus, count);
//周二, 年齡公升序
printf("周二, 年齡公升序:\n");
sortstudentarray(stus, count, cmpbyageasc);
printstudent(stus, count);
//週三, 姓名公升序
printf("週三, 姓名公升序:\n");
sortstudentarray(stus, count, cmpbynameasc);
printstudent(stus, count);
函式指標 指標函式 指標的指標 指標陣列
一 函式指標 首先它是乙個指標,只是這個指標指向的是乙個函式。指標變數可以指向變數的位址 陣列 字串 動態分配位址,同時也可指向乙個函式,每個函式在編譯的時候,系統會分配給該函式乙個入口位址,函式名表示這個入口位址,那麼指向函式的指標變數稱為函式指標變數。表示 struct file operati...
指標陣列,陣列指標,指標函式,函式指標
int p 4 指標陣列。是個有4個元素的陣列,每個元素的是指向整型的指標。int p 4 陣列指標。它是乙個指標,指向有4個整型元素的陣列。int func void 指標函式。無參函式,返回整型指標。int func void 表示函式指標,可以指向無參,且返回值為整型指標的函式。右左規則 因為...
指標函式,指標常量,函式指標,常量指標
指標函式 指標函式是指函式的返回值型別是乙個指標型別,即本質是乙個函式。如 float find float pionter 4 int n 指標常量 指標常量是指標所指向的位置不能改變,即指標本身是乙個常量。如 int const p a 指標就是位址,也就是位址不能改變,如上 int const...