和菜鳥一起學c之函式指標

2021-06-07 14:44:41 字數 1912 閱讀 4903

還有sd卡的檔案格式識別還不會,等明天和飛刀一起討論下,基本的android的sd卡的自動掛載已經實現了,可惜只支援fat格式的,ext格式的他不支援,新增了那些其他格式的掛載還是不行,主要是識別還不知道怎麼去實現。好了,既然這麼著,還是把以前看的一些函式指標做個記錄吧。因為linux驅動中很多很多都用到了函式指標,一開始我都覺得奇怪,後來才知道這個。都怪自己以前對於指標的一些知識學得太少了,太淺了。

先看個簡單的**吧:

#include static int max(int a,int b)

else

return 0;

}

int main(void)

再看看執行結果:

這裡定義了乙個函式指標,pmax,然後這個指標指向了max這個函式,然後當執行z = (*pmax)(x, y);時就會執行那個比較大小的函式了,然後就有了上面的結果了。

好了,接下去我們看看比較複雜的,本人寫得搓搓的**:

#include #include #include struct point

;struct my_point_ops

;double my_line_length(struct point p1, struct point p2)

int my_draw_point(struct point *p)

struct my_point_ops mops = ;

int main(void)

; struct point p2 = ;

p3 = (struct point *)malloc(sizeof(struct point));

p3->x = 3;

p3->y = 4;

printf("%lf\n", mops.line_length(p1, p2));

printf("%d\n", mops.draw_point(p3));

free(p3);

return 0;

}

不知道為什麼

cfree

執行錯了,用

gcc編譯時過了的。這個就不糾結了。

首先看看這個my_point_ops結構體

struct my_point_ops

;

裡面定義了兩個函式指標。驅動裡的**越來越覺得有物件導向的概念了,什麼都是乙個乙個物件乙個結構了。

然後接下來看看這個,這個其實就是初始化了,其函式指標line_length指向了my_line_length函式,函式指標draw_point =指向了my_draw_point函式。

struct my_point_ops mops = ;
在看最後

printf("%lf\n", mops.line_length(p1, p2));

printf("%d\n", mops.draw_point(p3));

當呼叫mmops

的成員函式

mops.line_length(p1, p2)

其實就是呼叫了

double my_line_length(struct point p1, struct point p2)

而當呼叫

mmops

的成員函式

mops.draw_point(p3)

其實就是呼叫了

int my_draw_point(struct point *p)

簡單吧,就是這樣的。哈哈。。。。

一起學C 二

第二章 核心c 第1節,第乙個c 程式。這個程式是你現在包括以後能看到的所有c 程式中最最簡單的,它的功能就是在螢幕上顯示一串字元,然後等待執行它的人敲一下回車鍵後結束。想把這個程式從頭到尾做一遍,對乙個沒有程式設計經驗的人來說,也是乙個不容易的工作。我們先來說說這裡面有哪些坑。1.windows自...

一起學C 三

第二章 核心c 第一節,第乙個c 程式。第乙個程式成功執行了,我們來看看 都是由什麼組成的,它們都做了些什麼。using system namespace wrox 1.第1行,using system using是關鍵字,想要使用這個功能,就必須使用using這個關鍵字。c 中有很多關鍵字,每乙個...

一起學C 七

作為程式設計師,生來就要服務於客戶,善於滿足客戶提出的各種各樣稀奇古怪的要求。今天,有乙個客戶對我們說 我從小心算能力就差,你們能不能給我寫乙個程式,幫我提高心算能力?我的要求不算高,你們只要給我出幾道兩個整數的加法題,每個數不大於100,先讓我心算,然後再把正確答案顯示在螢幕上就行了。我們看看這個...