結構中使用函式指標

#include

typedef struct Ball CBall;
struct Ball {
char *color;
double radius;
double (*volumn)(CBall*); // 函式指標
};

// 計算實例體積
double volumn(CBall *this) {
double r = this->radius; // 模擬 this 指標 的行為
return r * r * 3.14;
}

void initBall(CBall *ball, char *color, double radius) {
ball->volumn = volumn; // 連結函式
ball->color = color;
ball->radius = radius;
}

int main(void) {
CBall ball;
initBall(&ball, "red", 5.0);

printf("ball 實例的體積: %.2f\n", ball.volumn(&ball));
return 0;
}




看一看吧!

看不懂的時候可以看這個網頁

http://caterpillar.onlyfun.net/Gossip/CGossip/StructPoint.html

另外,如果在dev-c上面要編這個程式的話是不會compile過的

因為dev-c++

this 是一個關鍵字

我是跑到freeBSD上面用gcc a.c編譯過的


附帶一提,ball->volumn = volumn; // 連結函式

這一行的功能真的只是將這個指標指到 volumn 這個區塊而已,並不會執行

後來進行到 ball.volumn(&ball)

呼叫 ball 的 volumn 指標

才去執行 volumn 這個區塊,並且傳入參數ball

沒有留言: