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
沒有留言:
張貼留言