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