作者Nairoda (new)
看板C_and_CPP
標題[問題] 函式指標
時間Fri Jul 29 23:40:43 2011
有兩個問題請教各位
第一個問題:
若宣告一個函式指標變數且將一個函數賦值給它,
那此函式指標變數指向何處? 像是指向一個記憶體位址嗎?
而記憶體儲存的是函數?
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