指標函式和函式指標

2021-07-03 03:15:05 字數 1810 閱讀 4313

int

*f(x,y);

double *function

(); vs double (*function)();

double *p;

p = function

();

上面是兩種宣告形式生命的是不同的內容,左邊乙個是指標函式,右邊的是函式指標,怎麼區分呢?

其實道理很簡單,就看下未明身份的字元前面的是否在括號裡,像左邊的, function 大家是認識的,就是函式的意思,假如大家遇到乙個不認識的詞,就看它前面的 有沒有和它同在乙個括號裡,不在,就是指標函式,在的話,就是函式指標.

函式指標

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

f = function;// 賦值(將函式( function) 賦值給指標 f)

ret = f(6);//呼叫(通過函式指標呼叫函式)

1.函式指標 - 賦值
f = &function;

f = function;

f();// 通過函式指標呼叫函式

2.函式指標 - 呼叫

-通過指標呼叫函式,可以採用以下兩種形式:

1.ret = (*f)(6);//明確指出通過讀取指標變數呼叫函式

2.ret = f(6);

f();//通過函式指標呼叫函式

如何區分

函式名前面的星號*有沒有被括號()包含

包含,就是函式指標

沒包含,就是指標函式

下面舉乙個例子:

int(*(*function)(int*))[10];
擦,這可怎麼理解啊!肯定會有人這麼說,其實要想理解這個」東西」 邏輯就需要使用左右法則,又稱為右左法則.

左右法則例子

int(*function)(int

*p);

首先, function 是未定義的標示符,先向右看,是圓括號,再向左看,前面有乙個 ※號,那麼 function 就是乙個指標,跳出圓括號.再向右看又是乙個括號,說明( * function)是乙個函式,並且是乙個函式指標,其引數是 乙個整形的指標,返回值也是整形;

例子

int(*function)(int *p,int (*fun(int*)));
判斷方法,先看 function前面有乙個*,後面有乙個括號,所以,它是乙個函式指標,函式的內容有乙個整型的指標 p, 還有乙個什麼呢?

在分析 f, 前面有乙個*,後面有乙個括號,說明 f 是乙個函式指標,函式內有有乙個整型的位址,返回值是整型.

所以,總的來說, function 是乙個函式指標,其函式體內有乙個整型的位址,還有乙個函式指標,裡面的函式指標裡也有乙個整型的指標,返回值為int,function 的返回值也是整型.

例子

int (*func[5])(int

*p);

判斷方法, func 是乙個陣列,前面有*,所以是乙個存放位址的陣列,後面還有圓括號,所以又是乙個函式指標,是乙個存放是乙個存放陣列位址的函式指標,看後面的括號,存放的是整型的指標指向的位址.再向前看, int返回值

再來個複雜的

int (*(

*func)[5])(int

*p);

判斷方法, func 是乙個指標(前面有*),跳出最近的括號,是乙個陣列,這就變的和上面一樣了,也是乙個函式指標只不過是乙個指標陣列,裡面存放的是整型指標的位址,,返回值是 int

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

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 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...