C 函式指標

2021-10-03 17:36:28 字數 3393 閱讀 1285

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。

因為指標儲存的值是一塊記憶體位址,而函式也是在記憶體的某個位址中,所以,當乙個指標指向的記憶體位址指的是乙個函式的話,這種指標被稱為函式指標

定義乙個函式指標取決於被指向的函式的函式返回型別和引數列表。例如,有函式的定義如下:

int

max(

int x,

int y)

則定義乙個指標指向該函式的寫法是:

int

(*p)

(int

,int)=

&max;

宣告函式指標需要注意的事項:

指標對應的資料型別必須與函式返回值一致

指標引數列表必須與函式引數列表中的資料型別的順序一致,不需要形參

直接看乙個案例,會更容易理解函式指標的定義

#include

// 宣告函式

intfun1()

;int

fun2

(int x,

double y)

;double

fun3

(int x,

double y,

int z,

long i)

;void

fun4

(int x)

;void

fun5

(double x,

int* p)

;int

*fun6

(int x)

;int

main()

// 定義函式

intfun1()

intfun2

(int x,

double y)

double

fun3

(int x,

double y,

int z,

long i)

void

fun4

(int x)

void

fun5

(double x,

int* p)

int*

fun6

(int x)

把函式指標看作是乙個函式的影子,使其以變數的形式存在於程式中,進而可以到處被傳遞或者運用。換句話說,函式指標既能像函式一樣被使用,又能像變數那樣被傳遞。如下例所示:

#include

void

print

(const

char

* cs)

intmain()

執行結果:

hello world!
再來乙個有返回的小案例:

#include

intmax

(int x,

int y)

;int

main()

intmax

(int x,

int y)

執行結果:

max(10, 3)

= 10

p(10, 3)

= 10

一旦某個指標指向了乙個函式後,當該指標以變數的形式傳遞到某個函式中,那麼是能夠在目標函式內呼叫該指標指向的函式的。案例**如下所示:

#include

#include

#include

#define size 6

/** * 求兩個數的最大值

*/int

max(

int x,

int y)

;/**

* 得到乙個隨機的陣列指標

*/int

*randarray()

;/**

* 求乙個陣列中最大的數字

* @param array 指標陣列

* @param size 陣列大小

* @param *p 求最大值的函式

*/int

maxinarray

(int

*array,

int size,

int(

*p)(

int,

int));

intmain()

// 當遍歷結束後, ns 指向的是陣列最後乙個元素, 需要將其重置到索引為零的指標處

for(i = size; i >

0; i--

)// mv = maxinarray(ns, size, &max);

mv =

maxinarray

(ns, size, m)

;printf

("max number is %d in array.\n"

, mv)

;return0;

}/**

* 求兩個數的最大值

*/int

max(

int x,

int y)

/** * 得到乙個隨機的陣列指標

*/int

*randarray()

return nums;

}/**

* 求乙個陣列中最大的數字

* @param array 指標陣列

* @param size 陣列大小

* @param *p 求最大值的函式

*/int

maxinarray

(int

*array,

int size,

int(

*p)(

int,

int)

)return m;

}

執行結果:

*ns[0]=13213.

*ns[1]=23737.

*ns[2]=15703.

*ns[3]=17692.

*ns[4]=14498.

*ns[5]=26241.

max number is 26241 in array.

本例中,指標 p 和指標 m 都是函式指標,函式指標 p 在 main 函式中被呼叫,並返回乙個陣列指標,最後將返回的陣列指標 和指標 m 都傳遞到 maxinarray 函式中,並在函式 maxinarray 中呼叫指標 m 指向的函式得到最終的結果。

C 指標函式和函式指標

1 指標函式 1 基本概念 指標函式 顧名思義就是帶有指標的函式,即其本質是乙個函式,只不過這種函式返回的是乙個對應型別的位址。2 定義式 type func type type 如 int max int x,int y 3 例子詳解 cpp view plain copy 1.include 2...

c 指標函式和函式指標

函式指標與指標函式 1 函式指標 形式 返回型別 函式名 參數列 一種特殊的指標,它指向函式的入口 定義乙個函式指標p,只能指向返回值為int,形參為兩個int的函式 輸出結果 include stdafx.h include using namespace std int p int,int in...

C 函式指標與指標函式

函式指標 函式名本身代表著函式的位址,因此給函數指標賦值使可以不用加 符號 加也可以!void func int 定義乙個函式 void pf int 定義乙個函式指標 pf func 給函式指標賦值 int f x,y 其中x,y是形式引數,f是函式名,呼叫後返回乙個指向整型資料的位址指標。f x...