還有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,先讓我心算,然後再把正確答案顯示在螢幕上就行了。我們看看這個...