C C 沉思 指標函式和函式指標

2021-08-26 10:05:38 字數 2289 閱讀 6970

一指標函式

乙個函式不僅可以返回乙個整形資料的值、字元型別值和實型型別的值,還可以返回指標型別的資料,使其指向某個位址單元。指標函式即返回指標的函式。

指標函式一般定義格式為:

型別識別符號*

函式名(

參數列);

其中,字尾運算子括號()

表示這是乙個函式,其字首運算子星號

*表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到乙個指向返回值為…的指標(位址)。

比如:int*f(intx,inty);

由於*的優先順序低於

()的優先順序,因而

f首先和後面的

()結合,也就意味著,

f是乙個函式。即:

int*(f(intx,inty);

接著再和前面的*

結合,說明這個函式的返回值是乙個指標。由於前面還有乙個

int,也就是說,

f是乙個返回值為整型指標的函式。

其中x,y

是形式引數,

f是函式名,呼叫後返回乙個指向整型資料的位址指標,

f(intx,inty)

是函式,其返回值是指標。

#include using namespace std;

char *display(char *str)

int main()

程式執行截圖:

二函式指標

(1)函式指標的定義

在程式執行中,函式**是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址,可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式的首位址,指向函式**首位址的指標變數稱為函式指標。

函式指標一般定義格式:

型別識別符號(*

指標變數名

)(形參列表);

由於()

的優先順序高於

*,所以指標變數名外的括號是必不可少的。

比如:int(*f)(intx);

通過括號強行將f

首先與「

*」結合,也就意味著,

f是乙個指標,接著與後面的「

()」結合,說明該指標指向的是乙個函式,然後再與前面的

int結合,也就是說,該函式的返回值是

int。由此可見,

f是乙個指向返回值為

int的函式的指標。

定義函式指標時應該注意:

1函式指標和它指向的函式的引數個數和型別都應該是一致的

2函式指標的型別和函式的返回值型別也必須是一致的

(2)函式指標的賦值

函式名和陣列名一樣代表了函式**的首位址,因此在賦值時,可以直接將函式指標指向函式名

比如:intfunc(intx);

//宣告乙個函式

int(*f)(intx);

//宣告乙個函式指標

f=func;//將

func

函式的首位址賦值給函式指標f

賦值時函式func

不帶括號,也不帶引數,由於

func

代表函式的首位址,因此經過賦值以後,函式指標

f就指向函式

func(x)

的**的首位址

(3)通過函式指標呼叫函式

函式指標是通過函式名及有關引數來進行呼叫的,與其他指標變數類似,如果指標變數pi

是指向某整型變數

i的指標,則

*pi等於它所指向的變數

i。同樣的,

f是指向函式

func(x)

的指標,則

*f就代表它所指向的函式

func

。所以在執行了

f=func

之後,*f

和func

代表同一函式。

由於函式指標指向儲存區中得某個函式,因此可以通過函式指標呼叫相應的函式,該過程分為以下三步:

1宣告乙個函式指標變數

比如:int(*f)(intx);

2對函式指標變數賦值

比如:f=func

;(func

必須先要有定義)

3要用(

*指標變數)(參數列)的格式來呼叫函式

比如:(*f)(x

)(x必須先賦值)

#include using namespace std;

int max(int x, int y)

//函式指標

int (*pmax)(int x, int y);

int main()

程式執行截圖:

C C 指標函式和函式指標

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

C C 函式指標與指標函式

面試的時候,經常有面試官問這個問題,在linux核心裡面也是經常被使用的,在看很多大神的 裡面,我們也經常遇到函式指標與指標函式,一樣,如果你自己沒問題了,就不用往下看了。我們看個 int func int a,int b 我們之前說過運算子的優先順序,的優先順序低於 由於 的優先順序低於 的優先順...

c C 指標函式

我們知道,指標式記憶體首位址,那是針對變數來說的,我也知道,程式是由變數,函式組成的。那麼函式的指標是怎麼定義的呢?我們也知道函式也是存放在記憶體的 區域,它同樣有首位址,關鍵是我們怎樣才能獲取它的位址呢?如果我們定義乙個 int test int a 的函式,那麼它的位址就是函式名字test,這一...