C語言 指向函式的指標自我理解

2021-10-04 18:23:36 字數 1903 閱讀 5963

人之所以痛苦,那是因為你在成長。--------magic_guo

乙個函式的執行過程:

在編譯時,系統為函式**塊分配一塊儲存空間,生成乙個指向函式的指標變數,這個指標變數指向函式的入口位址,依次自上而下指向每一條**指令並執行指令。而這段儲存空間的起始位址(又稱入口位址)便稱為這個函式的指標。

函式指標定義的一般形式:

型別名 ( 指標變數名)(函式引數列表)*

例如:int ( * p)(int, int);

最前面的int表示這個函式的返回值是int型別的,注意 * p的括號不能省略,表示p先和 * 號結合,是指標變數;然後再與後面的括號結合,表示是函式,兩個int表示,此函式接收兩個int型別的引數。

當然,呼叫乙個函式時,可直接呼叫函式名來使用函式;不過也可以通過指向函式的指標變數來呼叫該函式。

下面我們來看一看通過函式名呼叫函式通過指標變數來呼叫函式的區別:

1.通過函式名呼叫函式

# include

// 通過直接呼叫函式,求兩個數的最大值

2.通過指標變數來呼叫函式

# include

// 通過呼叫指向函式的指標,求兩個數的最大值

上述兩種呼叫函式的方法不一樣,但是結果是一樣的。

如何使用指向函式的指標變數:

看例題:

使使用者選擇選項和兩個值,來計算a和b的最大值或者最小值

使用指向函式的指標作為函式引數:

例題:使用者輸入兩個值,再進行選擇,根據不同的選擇(最大值、最小值、兩個數的和),計算出不同的值。

# include

intmain

(void

)int

fun(

int x,

int y,

int(

* p)

(int

,int))

intmax

(int x,

int y)

intmin

(int x,

int y)

intadd

(int x,

int y)

看完這幾段**,大家會覺得:既然直接呼叫函式那麼簡單,為什麼我還要使用指向函式的指標來呼叫函式的方法呢?

答:如最後一段**;在乙個程式中,如果我們只用到少數函式,那麼我們完全可以直接使用呼叫函式來完成需求。但是,如果在每次呼叫fun函式時,每次呼叫的函式是不固定的,而且函式的數量很多,這時我們使用指標變數就很方便了;只需要在每次呼叫時給出要呼叫的函式名和引數作為實參就可以。這樣符合程式的結構化設計原則。

C語言 指向函式的指標

1 函式型別 函式指標變數 指向函式的入口位址 乙個函式是若干語句的集合 經編譯後儲存在函式 儲存區 並占有一片連續的儲存空間 對函式指標只能用函式名賦值而無其他運算 include stdio.h 23 intmax intx inty 45 intmain 617 18int max intx ...

C語言 指向函式的指標

在c語言中,函式名代表函式的入口位址。可以定義乙個指標變數,接收函式的入口位址,讓它指向函式,這就是指向函式的指標,也稱函式指標。通過函式指標可以呼叫函式,它還可以作為函式的引數。函式指標的定義 函式指標定義的一般格式為 型別名 變數名 引數型別表 型別名指定函式返回值的型別,變數名是指向函式的指標...

C語言指向函式的指標

定義形式 型別 指標變數名 引數列表 例如 int p int i,int j 在這裡 int是函式的返回型別,p是指向函式的指標,int i,int j 是函式的引數 注意 int f int i,int j int p int i,int j 前者是返回值是指標的函式 後者是乙個指向函式的指標。...