函式指標,包裝,函式指標按姓名,年齡,成績排序

2021-06-23 02:22:37 字數 1520 閱讀 6196

//定義乙個學生結構體陣列

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 表示。指標函式...