int * getdata(int num);
形如上面的形式的為指標函式, 指標函式實際上就是函式,只是返回型別為指標。在
結構體的深度拷貝中 createat()函式便是乙個指標函式,用來得到結構體物件。這種用法很普遍(基本上是這麼用的),我們在打下基礎的時候要把這一點給掌握好了。
之前說過陣列是一種型別,其形式如下:
int [10];
char [12];
所以我們可以這樣的定義陣列型別:
typedef int (array_int)[10];
typedef char (array_char)[12];
並且可以毫無顧慮的使用定義的陣列型別來定義新的物件(這裡的物件不僅僅是指由我們自己定義的型別,任何內建型別以及我們自定義的型別 所什麼的識別符號都是物件):
array_int a_int;
array_char a_char;
同樣的道理,我們可以定義函式型別:
typedef int _func_(int ,char);
typedef void _func_void_(int ,double);
然後我們可以毫無顧慮的使用定義的函式型別來定義函式:
_func_ *myfun1;
_func_void *myfun2;
int getdate(int,char);
myfun1 = getdate;
void print_array(int,double);
myfun2 = print_date;
或者是我們可以直接定義函式指標型別:
typedef int (*pfunc)(int,int);
typedef void (*_pfunc_)(int,double);
使用定義的函式指標型別來定義函式指標:
int getdata(int,int);
void print_data(int,double);
pfunc func_get = getdata;//宣告時就立即初始化
_pfunc_ func_print;//先宣告
func_print = &print_data;//然後初始化
注意,上面func_print 在初始化時使用的是
&print_data
,實際上有沒有取位址符都行,這是編譯器設定的。
這是乙個簡單的程式,用來求圓的面積:
double square(double r)
下面這個是關鍵:
double area(double r,double(*p)(double))
double(*p)(double)表示使用函式指標做函式引數,然後在函式內部使用該函式指標。
9 3函式指標及其應用
函式指標是指向函式的指標,指向儲存這個函式第一條指令的位址,稱為函式的入口位址。int ascending int a,int b int descending int a,int b void selectionsort int a,int n,int compare int a,int b if...
函式指標和函式指標陣列及其應用
先來看乙個簡單的例子。int a 3 void p a 這是乙個基礎的不能再基礎的例子。相信學過指標的都能看得懂。p是乙個指標,指向a。a 是乙個整形變數。函式指標和其類似,只不過其指向的不是乙個變數,而是乙個函式,僅此而已。話不多說,看個例子。void funcpointer double x v...
C C 高階語法 引用
引用就是物件的另乙個名字。在實際程式中,引用主要用作函式的形參。引用是一種復合型別,通過在變數名前新增 符號來定義。引用必須用與該引用同型別的物件初始化。int var 12 int num var 沒問題,將int型的引用指向int型的物件 char ch var 錯誤,char型別的物件不能指向...