函式指標和指標函式

2021-05-24 11:02:02 字數 1690 閱讀 6932

資料型別標誌符 (指標變數名) (形參列表);

注1:「函式型別」說明函式的返回型別,由於「()」的優先順序高於「*」,所以指標變數名外的括號必不可少,後面的「形參列表」表示指標變數指向的函式所帶的引數列表。例如:

int func(int x); /* 宣告乙個函式 */

int (*f) (int x); /* 宣告乙個函式指標 */

f=func; /* 將func函式的首位址賦給指標f */

賦值時函式func不帶括號,也不帶引數,由於func代表函式的首位址,因此經過賦值以後,指標f就指向函式func(x)的**的首位址。

注2:函式括號中的形參可有可無,視情況而定。

下面的程式說明了函式指標呼叫函式的方法:

例一、#include

int max(int x,int y)

void main()

int (*ptr)(int, int);

int a,b,c;

ptr=max;

scanf("%d,%d",&a,&b);

c=(*ptr)(a,b);

printf("a=%d,b=%d,max=%d",a,b,c);

ptr是指向函式的指標變數,所以可把函式max()賦給ptr作為ptr的值,即把max()的入口位址賦給ptr,以後就可以用ptr來呼叫該函式,實際上ptr和max都指向同乙個入口位址,不同就是ptr是乙個指標變數,不像函式名稱那樣是死的,它可以指向任何函式,就看你想怎麼做了。在程式中把哪個函式的位址賦給它,它就指向哪個函式。而後用指標變數呼叫它,因此可以先後指向不同的函式。不過注意,指向函式的指標變數沒有++和--運算,用時要小心

不過,在某些編譯器中這是不能通過的。這個例子的補充如下。

應該是這樣的:

1.定義函式指標型別:

typedef int (*fun_ptr)(int,int);

2.申明變數,賦值:

fun_ptr max_func=max;

也就是說,賦給函式指標的函式應該和函式指標所指的函式原型是一致的。

例二、#include

void filefunc()

printf("filefunc/n");

void editfunc()

printf("editfunc/n");

void main()

typedef void (*funcp)();

funcp=filefunc;

(*funcp)();

funcp=editfunc;

(*funcp)();

函式體關於函式指標陣列的定義

關於函式指標陣列的定義方法,有兩種:一種是標準的方法;一種是矇騙法。  第一種,標準方法:    第二種,矇騙法:  儘管函式不是變數,但它在記憶體中仍有其實體地址,該位址能夠賦給指標變數。獲取函式位址的方法是:用不帶有括號和引數的函式名得到。  函式名相當於乙個指向其函式入口指標常量。 那麼既然函式名是乙個指標常量,那麼就可以對其進行一些相應的處理,如強制型別轉換。  那麼我們就可以把這個位址放在乙個整形指標陣列中,然後作為函式指標呼叫即可。  完整例子:  #include "stdio.h"  int add1(int a1,int b1);  int add2(int a2,int b2);  void main()    int add1(int a1,int b1)    int add2(int a2,int b2)  

函式指標 函式指標陣列和指標函式

1.函式指標 這個指標返回乙個函式 int f int x 宣告乙個函式指標 f func 將func函式的首位址賦給指標f 2.函式指標陣列 這個指標返回一組函式 include stdio.h void function0 void void function1 void void functi...

指標函式和函式指標

指標函式和函式指標 一 指標函式 當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。格式 型別說明符 函式名 引數 當然了,由於返回的是乙個位址,所以型別說明符一般都是int。例如 int getdate int aaa int,int 函式返回的...

函式指標和指標函式

函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...