C語言 指標訓練營 動態呼叫函式

2022-09-08 10:24:14 字數 3327 閱讀 4967

動態呼叫函式

1 - **示例:利用函式指標,實現函式動態呼叫

1 #include 23//

------------------------ 排序 -------------------------4//

定義乙個 bool 變數

5 typedef enum

bool;910

//結構體:儲存學生資訊

11 typedef struct

stustudent;

1819

20//

列印學生原有資訊

21void printstudent(student *s,int

count);

28 printf("

\n********************===\n");

29}3031

//按年齡排序

32//

問題:一旦需求改變,如要求按照性別或分數排序,很明顯,這種寫法就很不靈活

33void sortbyage(student *stu,int

count)43}

44}4546 printf("

----------------\n按年齡公升序\n\n");

47for (int i = 0; i < count; i++) ;

51 printf("

\n----------------\n");

5253}54

55//

-------------------- 動態地呼叫函式 ---------------------

56//

函式名作為引數,傳哪個就呼叫哪個

57//

步驟 ①:首先要搞出對應功能的函式

58//

年齡排序

59bool sortwithage(student s1,student s2)

6263

//分數排序

64bool sortwithscore(student s1,student s2)

6768

//姓名排序

69bool sortwithname(student s1,student s2)

7374

//步驟 ②:搞個同上函式型別的函式指標

75//

方式一:不使用 typedef 關鍵字

76//

此時函式指標作為引數,苦澀難懂,極為不便

77void sortstudent01(student *stu,int count,bool(*sortdemo)(student s1,student s2))87}

88}89}

9091

//方式二:使用 typedef 關鍵字

92 typedef bool(*sort)(student s1,student s2);

93//

簡潔明瞭

94void sortstudent(student *stu,int count,sort st,char methodname[20

])104

}105

}106

107 printf("

----------------\n按照 %s 進行排序\n\n

",methodname);

108for (int i = 0; i < count; i++) ;

112 printf("

\n----------------\n");

113114

}115

116117

//------------------ 根據字串,呼叫相應的函式 -----------------

118119

//步驟 ①:確定方法,並宣告同型別的函式指標

120int maxvalue(int a,int

b)123

124int minvalue(int a,int

b)127

128//

錯誤提示

129int errormessage(int a,int

b)133 typedef int (*pfun)(int a,int

b);134

135//

步驟 ②

136//

結構體:包含字串(函式名)、指向該函式的指標

137 typedef struct

namefunctionpairnfpdemo;

141142

//把方法放進結構體

143 nfpdemo nfp[2] =,

146

147};

148149

//步驟 ③:定義乙個函式,返回值是該型別函式的指標

150 pfun getfunctionwithname(char

name)

157}

158159

return

errormessage;

160};

161162

163int main(int argc, const

char *ar**) ,

167 ,

168 ,

169

170};

171172 printstudent(stu, sizeof(stu)/sizeof(stu[0

]));

173 sortbyage(stu,4

);174

175//

----------------------------------------

176//

只需要輸入函式名,就可以執行相應的函式

177 sortstudent(stu, 4, sortwithage,"

age"

);178 sortstudent(stu, 4, sortwithscore,"

score");

179 sortstudent(stu, 4, sortwithname,"

name");

180181

182//

-----------------------------------------

183//

根據字串,呼叫相應的函式

184 pfun pp = getfunctionwithname("ma"

);185 printf("

%d\n

", pp(30,40

));186

187return0;

188 }

LQ訓練營 C 學習筆記 動態規劃入門

1.3 動態規劃的優化原理與無後效性 2 動態規劃問題 2.2 蒜頭君下山問題 2.3 三維的蒜頭君回家問題 動態規劃是程式設計解題的一種重要手段,1951年美國數學家 bellman等人,根據一類多階段問題的特點,把多階段決策問題變成一系列相互聯絡的單階段問題,然後逐個解決。與此同時,他提出這類問...

等式 清華OJ 訓練營 c 實現

描述 有n個變數和m個 相等 或 不相等 的約束條件,請你判定是否存在一種賦值方案滿足所有m個約束條件。輸入第一行乙個整數t,表示資料組數。接下來會有t組資料,對於每組資料 第一行是兩個整數n,m,表示變數個數和約束條件的個數。接下來m行,每行三個整數a,b,e,表示第a個變數和第b個變數的關係 若...

C語言刷題訓練營 第一講

老師經常告訴我們 學習程式設計最好的辦法就是上機實踐,因為你要對計算機下指令,想讓計算機幫你幹活,就得多和計算機 交流 實踐才能出真知。輸入描述 無 輸出描述 include int main 解析 本題是乙個沒有輸入要求的題目,只考察輸入,所以只需要準確無誤的輸出結果就行了。題目描述 每個人都想成...