(1)函式指標的實質還是指標,還是指標變數,佔4個位元組。
(2)與普通指標,陣列指標,沒有啥區別,區別是在於指標指向的是什麼。
(3)函式的實質是一段**,這一段**在記憶體中是連續分布的(乙個函式的大括號括起來的所有語句將來編譯出來生成的可執行程式是連續的),多以對於函式來說很關鍵的就是函式中的第一句**的位址,這個位址就是所謂的函式位址,在我們c語言中用函式名(一段**的首位址)表示,
(4)結合函式的實質,函式指標就是乙個普通變數,這個普通變數的型別是函式指標變數型別,他的值就是某個函式的位址(也就是他的函式名這個符號在編譯器中對應的值)
(1)c語言本身是強型別語言(每乙個變數都有自己的變數型別),編譯器可以幫我們嚴格的型別檢查。
(2)所有的指標變數型別其實本質是一樣的,
#includeint main(void)
(3)假設我們有個函式是:void func(void);對應函式指標:void (*p) (void);
型別是:void (*) (void);
(4)函式名和陣列名最大的區別就是:函式名做右值時加不加&效果和意義都是一樣的:但是陣列名做右值時加不加&意義就不一樣。
(5)寫乙個複雜的函式指標的例項:strcpy函式(char *strcpy(char *dest,const char *src);),對應的函式指標是:char *(*pfunc) (char *dest, const char *src);
#include #include int main(void)
; char* (*pfunc)(char *, const char *);
pfunc = strcpy;
pfunc(a, "abc");
printf("a = %s.\n",a);
return 0;
}
(1)typedef是c語言中乙個關鍵字,作用是用來定義(或者叫重新命名型別)
(2)c語言中的型別一共2種:一種是編譯器自己帶的,第二種是使用者自定義型別不是語言自己帶的,是程式設計師自己定義的,比如結構體型別,陣列變數型別......
(3)我們今天講的函式指標,指標陣列,陣列指標都是使用者自定義型別。
(4)有時候自定義型別太長了,用起來不方便,所以用typedef重新命名乙個簡單好記的名字。
(5)typedef是給型別重新命名,加工出來的都是型別而不是變數。
char* (*ptype)(char *, const char *);
int main(void)
typedef (舊)char *pchar(新);
#define (新)pchar char*(舊)
(1)結構體在使用時都是先定義結構體型別,在用結構體型別去定義變數。
(2)c語言語法規定,結構體型別使用時必須是struct 結構體型別名 結構體變數名;這樣的方式來定義變數。
typedef struct student
student_s;
定義乙個結構體型別,第乙個名字叫 struct student,第二個叫student_s
//我們一次定義2個型別:
//第乙個是結構體型別,有2個名字:struct teacher, teacher
//第二個是結構體指標型別,有2個名字,struct teacher *, pteacher
typedef struct teacher
;teacher, *pteacher;
int main(void)
(3)一次定義2個型別,乙個是變數型別,乙個是結構體指標型別 函式指標與typedef
一 簡單的函式指標的應用。形式 1 返回型別 函式名 參數列 char pfun int char glfun int a void main 第一行定義了乙個指標變數 pfun 首先我們根據前面提到的 形式 1 認識到它是乙個指向某種函式的指標,這種函式引數是乙個 int型,返回值是 char 型...
函式指標與typedef
關於c 中函式指標的使用 包含對typedef用法的討論 一 簡單的函式指標的應用。形式1 返回型別 函式名 參數列 char pfun int char glfun int a void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,...
函式指標與typedef
關於c 中函式指標的使用 包含對typedef用法的討論 一 簡單的函式指標的應用。形式1 返回型別 函式名 參數列 char pfun int char glfun int a void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,...