C C 高階語法 函式指標及其應用

2021-07-06 09:03:48 字數 1725 閱讀 8614

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型別的物件不能指向...