C 函式指標與指標識別

2021-08-04 20:04:49 字數 2189 閱讀 9111

1、函式名與函式指標

函式名對應於該函式執行**的入口位址。通過取位址運算子「&」也可以取得函式的入口位址。指向函式的指標可以作為函式的引數傳遞。定義方式如下:

返回型別 (*指標變數名)(參數列)

由於乙個函式不能以函式作為引數,所以當乙個函式需要將函式作為引數時必須借用指向函式的指標(也可以用包含該函式的類物件)。

2、函式指標的使用方法

如有函式void scopy(char *q,char *p),函式名scopy代表函式的入口位址,或者說是乙個指向該函式的指標,該指標的型別為:

void (*)(char *q,char *p) //q與p寫與不寫是一樣的

定義這種函式指標型別的變數pf並用scopy初始化:

void(* pf)(char *,char *)=scopy; //或者=&scopy,兩者等效

pf將儲存scopy函式的入口位址。

【例6.13】梯形法求積分的函式integer()作為通用函式,可求任一函式的定積分。(檢視原始碼)

1、指向類成員函式的指標

在類物件中有隱含的this指標,用以正確訪問成員函式。所以指向類成員函式的指標有其特殊性。

成員函式有乙個非成員函式沒有的屬性:它所屬的類(class)。所以指向成員函式的指標需要三個方面的匹配:引數的型別和個數,返回型別和所屬的類型別。

普通函式指標儲存函式的位址,可以直接用來呼叫指定函式。成員函式指標必須首先被繫結在乙個物件或指標上,才能獲得被呼叫物件的this指標,然後才能呼叫指標所指向的成員函式。雖然兩者都被稱為指標,但是它們是不同型別的資料。

2、指向類成員函式的指標的說明及初始化

以指向商品類 getprice()函式的指標為例:

float (cgoods::*pf)()= cgoods::getprice;

3、成員函式指標的用法(繫結)

cgoods car;

(car.*pf)();

//將指標pf與物件car繫結,最終等效呼叫car. getprice ();

上式表示指標pf與物件car繫結,指向了car. getprice ()。所以指向成員函式的指標儲存的不是成員函式的位址,繫結後才獲得位址。

也可以用物件代替類進行初始化,效果一樣:

cgoods car,motor;

float (cgoods::*pf)()=motor.getprice;

//等效float (cgoods::*pf)()= cgoods::getprice; 並未繫結

(car.*pf)(); //將指標pf與物件car繫結

1、複雜說明的閱讀和理解的方法

說明中包括多種說明符容易造成閱讀和理解的困難。

一種理解和構造物件說明的方法是:先撇開識別符號,按從右到左的順序逐個解釋每個說明符,如果有括號則改變解釋的先後,先解釋括號內再解釋擴號外。例如:

int *arrp[5];

按下列順序理解:五個元素的陣列、每個元素是乙個指標、指標指向整型,所以arrp是乙個有五個整型指標作為陣列元素的陣列。又如:

int (*parr)[5];

按下列順序理解:是乙個指標,指標指向乙個包含五個元素的陣列,每個元素是乙個整型,所以parr是乙個指向五個整型數的陣列的指標。

2、複雜說明的例項

int i, *ip, f(), *fp(), (*pf)();

*(*pfp)(), a[5], *ap[5], (*pa)[5], (*(*fap))();

答案:i —— 是乙個整型的變數;

ip—— 是乙個指向整型變數的指標,即 ip 中儲存的是另乙個整型變數的位址;

f —— 是乙個返回整型值的函式;

fp—— 是乙個返回整型指標的函式,即 fp 返回的是乙個指向整型變數的指標;

pf—— 是乙個指向返回整型值的函式的指標;

pfp——是乙個指向函式的指標,該函式返回乙個整型指標;

a —— 是乙個有五個整型元素的陣列;

ap—— 是乙個指標陣列,每個元素是乙個指向整型的指標;

pa—— 是乙個指向整型陣列的指標,該陣列有五個整型元素;

fap——是乙個指向陣列的指標,該陣列的每個元素都是乙個指向函式的指標,而所指的函式的返回值是整型。

C 函式指標與指標函式

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

C 函式指標與指標函式

c 要是不常用,相信過四天你的指標函式與函式指標的概念就該忘個精光。其實只要記住誰在後面誰就是哪個本質。先了解下指標陣列與陣列指標吧 陣列指標 就是指向陣列的指標,它表示的是乙個指標,它指向的是乙個陣列,它的重點是指標,如,int pa 8 宣告了乙個指標,該指標指向了乙個有8個int型元素的陣列 ...

C 指標函式與函式指標

指標預熱知識 1 指標就是位址 2 指標的型別應該與變數型別匹配 例如 int a 2 指標pa是int 型別,所以只能存放int型別變數a的位址 絕對不能存放char double.等型別變數的位址 int pa a include stdafx.h include using namespace...