//定義乙個學生結構體陣列
typedef struct student student;//結構體型別重定義
//按年齡排序, 只有判斷條件不同,可以把他們單獨提出來,因為判斷條件的結果只有兩個,非0即1,因此可以用bool型別的返回值來代替
bool sortstudentbyage(student stu1, student stu2)
//按成績排序
bool sortstudentbyscore(student stu1, student stu2)
//按姓名排序
bool sortstudentbyname(student stu1, student stu2)
//有了上面的幾個函式,在控制台要通過輸入乙個函式就能實現結果,所以因此必須有乙個函式指標型別的變數能夠指向所有的函式,所以要有乙個函式指標型別重定義,因為他們在同乙個結構體中,所以結構體型別一樣從而引數型別要換成結構體型別
//函式指標型別重定義
typedef bool(*pstudent)(student, student);//pstudent是乙個函式指標型別,他的變數可以指向上述函式中的任何乙個
//建立字串和函式之間的一一對應關係
//建立表的結構體定義
typedef struct nameafunctionpairnameafunctionpair;
//三個函式之間唯一的不同就在於 氣泡排序中的判斷條件不同
pstudent getfunctionbyname(char *name, nameafunctionpair *p, int count)
}//如果沒有對應的函式,就返回null,放在for迴圈之外
return null;
}void sortstudent(student *pstu, int count, char *name, nameafunctionpair *pair, int number)}}
}/輸出排好的學生
void output(student *pstu, int count)
}//根據給定的字串查詢匹配表,找出對應的函式,有返回值
//name用來接收匹配的字串
//p用來接收匹配表
//count 用來接收匹配表中元素的個數
int main(int argc, const char * argv)
, ,,,
};//建立乙個匹配表, 結構體
nameafunctionpair pair[3] = ,//第乙個為字串,第二個為函式,};
char tempname[20] = ;//用來接收從控制台輸入的字串
printf("請輸入排序的方式(姓名:name, 年齡:age, 成績:score):\n");
scanf("%s", tempname);
//對學生排序
sortstudent(stu, 5, tempname, pair, 3);
output(stu, 5);
函式指標 指標函式
a char fun1 char p1,char p2 b char fun2 char p1,char p2 c char fun3 char p1,char p2 後兩個都不難理解,那麼第乙個是什麼呢?這裡fun1 不是什麼函式名,而是乙個指標變數,它指向乙個函式。這個函式有兩個指標型別的引數,...
函式指標 指標函式
函式指標和指標函式,很多同學分不清楚,其實我們沒有必要刻意去區分他們的概念,可以自己寫乙個例子,就很容易明白他們各自的用途了!include include include int test int m,int n,int pfunc int a,int b int add int,int int ...
函式指標 指標函式
如果在函式中定義了乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始位址 又稱入口位址 稱為這個函式的指標。定義一般函式指標的形式 型別名 指標變數名 函式引數列表 例子 int p int,int p是乙個指向函式的指標變數。p的型別為 int int,int 表示。指標函式...