[問題] 關於回傳值 與 改變參數 的問題

看板C_and_CPP作者 (狗狗)時間10年前 (2013/09/19 15:19), 編輯推噓2(2012)
留言14則, 5人參與, 最新討論串1/2 (看更多)
想問幾個關於 C 語言的問題 問題一:如果一個 function 的回傳值的型別不確定 有辦法宣告嗎? 例如:有兩個 function 定義如下 /** 計算一個物件的分數 */ int calculateScore(void *obj){ return scoreForAnswers(obj->answer1, obj->answer2); //有很多answers只列兩個 }; /** 針對答案進行分數計算 */ int scoreForAnswers(int answer, ...){ int score; // 把 answer 計算加總然後 assign 給 score return score; }; 今天我想插入一個 function call 在兩個 functions 之間: /** 這個 function 可以接受任何 type 的 value 並把該 value 繼續回傳*/ unknown_return_type sideEffect(unknown_return_type value){ printf("This is side effect function"); return value; } /** 計算一個物件的分數,但多呼叫一個 sideEffect() */ int calculateScore(void *obj){ return sideEffect(scoreForAnswers(obj->answer1, obj->answer2)); }; ==> 因此執行 calculateScore() 時,會順便執行 sideEffect function // ----- 請問 有辦法讓一個 function 吃一個未知 type 的變數 並將它回傳嗎? // ----- 問題二:有辦法把一個變數傳入一個沒有回傳值的 function 後,還能改變該變數嗎? (解答): int integer_not_greater_than_100(int *input){ if (*input > 100){ *input = 100; return 1; } return 0; } void printIntValue(int value){ int hasChanged = integer_not_greater_than_100(&value); printf("value: %d; hasChanged: %d", value, hasChanged); } int main (int argc, char * argv[] ) { int value = 300; printIntValue(value); // 會印出100 return 0; }; ==> 希望當 printIntValue() 輸入的值大於 100 時,只會列印 100 這兩個問題我一直想要去實踐,但是一直找不到方法 希望高手能幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.245.65.129

09/19 15:28, , 1F
純C嗎?
09/19 15:28, 1F

09/19 15:29, , 2F
1. template 2. int &value
09/19 15:29, 2F

09/19 15:30, , 3F
1. 要改介面考慮 void * 2. 看不懂需求,為何要求 void ?
09/19 15:30, 3F

09/19 15:36, , 4F
使用 C (或Obj-C) ;E大的回答我不太懂 >"<
09/19 15:36, 4F

09/19 15:37, , 5F
不用巢狀呼叫吧… 用個 callback 接受 void* 即可
09/19 15:37, 5F

09/19 15:38, , 6F
C or Obj-C 請忽視我的發言...
09/19 15:38, 6F

09/19 15:41, , 7F
第二個問題:印的責任應該在 printIntValue 裡,最前
09/19 15:41, 7F

09/19 15:42, , 8F
面加上 if 判斷即可。不要寫一行程式
09/19 15:42, 8F

09/19 15:44, , 9F
加在後面不用判斷,直接印出即可
09/19 15:44, 9F

09/19 16:13, , 10F
第二個問題解決了,謝謝大家 ^^ 不過第一個還在研究中
09/19 16:13, 10F
※ 編輯: leondemon 來自: 60.245.65.129 (09/19 16:26)

09/19 16:30, , 11F
不太懂 loveme 大大對於第一個問題的意思 Orz
09/19 16:30, 11F

09/19 19:34, , 12F
問題一你可以找一下 stdlib.h 裡面 qsort 的實作。
09/19 19:34, 12F

09/19 19:35, , 13F
loveme~ 講的應就是那方式
09/19 19:35, 13F

09/19 22:33, , 14F
謝謝提示 我會去找找看^^
09/19 22:33, 14F
文章代碼(AID): #1IEgLtUk (C_and_CPP)
文章代碼(AID): #1IEgLtUk (C_and_CPP)