看板 C_and_CPP 關於我們 聯絡資訊
有兩個問題請教各位 第一個問題: 若宣告一個函式指標變數且將一個函數賦值給它, 那此函式指標變數指向何處? 像是指向一個記憶體位址嗎? 而記憶體儲存的是函數? ex: duoble ex1(double x); int main(){ double (*pf)(double); pf = ex1; } ex1 是函式名稱, 亦代表一個函式的位址, 所以可以寫 pf = ex1; 那函式 ex1 本身是儲在何處? 是像一般變數一樣存在記憶體中嗎? 第二個問題: 以下例子中有兩個函式 f1 與 f2, 其第一個形式引數皆是同型的函式指標, 且回傳第一個引數所計算出來的數值。請問以下例子中 return 的寫法 有無差異? (雖然傳回的數值都是一樣的) #include<stdio.h> double f1(double (*pfun)(double), double x); double f2(double (*pfun)(double), double x); double sqr(double x); int main(){ printf("f1(sqr,2.0) = %lf\n",f1(sqr,2.0)); printf("f2(sqr,2.0) = %lf\n",f2(sqr,2.0)); } double f1(double (*pfun)(double), double x){ return pfun(x); } double f2(double (*pfun)(double), double x){ return (*pfun)(x); } double sqr(double x){ return x*x; } 請多多指教. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.176.174.156 ※ 編輯: Nairoda 來自: 180.176.174.156 (07/29 23:41)
LPH66:問題一: 你可以想想 main 又是存在何處 07/29 23:59
LPH66:main 也是一個函式 自然不會有太多的差異點 07/30 00:00
LPH66:問題二: 的確由於因為那是函式指標的關係 07/30 00:01
LPH66:在一個函式指標變數的後面直接加上參數列其實不會有別的解釋 07/30 00:02
LPH66:因此我們可以不寫dereference的* 反正一定是呼叫指向的函式 07/30 00:03
Nairoda:L 大是指 .txt 區嗎? ㄜ~ 我對這些的確不瞭解... 07/30 00:16
Favonia:@Nairoda:第一個問題有很多部份。首先在C裡函式不是物件, 07/30 01:21
Favonia:有千百萬種方法實作函式呼叫。再來是你現在用的電腦九成九 07/30 01:22
Favonia:是范紐曼架構,而且編譯器九成九用堆疊和組語現成指令實作 07/30 01:29
Favonia:總之你的第一個問題中關於記憶體的部份,語言本身沒有講。 07/30 01:32
tropical72:問題一:程式設計師的自我修養,ch10. 07/30 16:03