[問題] 函式指標

看板C_and_CPP作者 (new)時間13年前 (2011/07/29 23:40), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/2 (看更多)
有兩個問題請教各位 第一個問題: 若宣告一個函式指標變數且將一個函數賦值給它, 那此函式指標變數指向何處? 像是指向一個記憶體位址嗎? 而記憶體儲存的是函數? 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)

07/29 23:57, , 1F

07/29 23:59, , 2F
問題一: 你可以想想 main 又是存在何處
07/29 23:59, 2F

07/30 00:00, , 3F
main 也是一個函式 自然不會有太多的差異點
07/30 00:00, 3F

07/30 00:01, , 4F
問題二: 的確由於因為那是函式指標的關係
07/30 00:01, 4F

07/30 00:02, , 5F
在一個函式指標變數的後面直接加上參數列其實不會有別的解釋
07/30 00:02, 5F

07/30 00:03, , 6F
因此我們可以不寫dereference的* 反正一定是呼叫指向的函式
07/30 00:03, 6F

07/30 00:16, , 7F
L 大是指 .txt 區嗎? ㄜ~ 我對這些的確不瞭解...
07/30 00:16, 7F

07/30 01:21, , 8F
@Nairoda:第一個問題有很多部份。首先在C裡函式不是物件,
07/30 01:21, 8F

07/30 01:22, , 9F
有千百萬種方法實作函式呼叫。再來是你現在用的電腦九成九
07/30 01:22, 9F

07/30 01:29, , 10F
是范紐曼架構,而且編譯器九成九用堆疊和組語現成指令實作
07/30 01:29, 10F

07/30 01:32, , 11F
總之你的第一個問題中關於記憶體的部份,語言本身沒有講。
07/30 01:32, 11F

07/30 16:03, , 12F
問題一:程式設計師的自我修養,ch10.
07/30 16:03, 12F
文章代碼(AID): #1ECjHza0 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ECjHza0 (C_and_CPP)