C/C++函式指標與指標函式
阿新 • • 發佈:2018-12-29
前面說的話
面試的時候,經常有面試官問這個問題,在Linux核心裡面也是經常被使用的,在看很多大神的程式碼裡面,我們也經常遇到函式指標與指標函式,一樣,如果你自己沒問題了,就不用往下看了。
定義
我們看個程式碼
int *func(int a,int b)
我們之前說過運算子的優先順序,*的優先順序低於(
由於“*”的優先順序低於“()”的優先順序,因而func首先和後面的“()”結合,也就意味著,func是一個函式。即:
int *(func)(int a,int b)
然後這個函式的返回值的型別是 int * 即:指向int型別的指標
然後我們這樣修改上面的程式碼
int (*func)(int a,int b)
(*func)說明func是一個指標,然後後面跟著()說明這個指標指向一個函式,即函式指標。
所以
函式指標:首先是一個指標,這個指標指向一個函式
指標函式:首先是一個函式,這個函式的返回值一個指標
用typedef宣告一個函式指標
我們宣告一個函式指標,正常方法是
int (*pfunc)(int a,int b)
當我們命名很多個函式指標的時候,用上面的方法顯得非常不方便,所以我們可以這樣做
typedef int (*PF) (int a,intb) PF pfunc;
例程:
#include "stdio.h" typedef int(*PF)(int, int); int add(int a, int b) { return a + b; } int reduce(int a, int b) { return a - b; } int main() { PF pfunc = NULL; pfunc = add; printf("add:%d\n",pfunc(3, 4)); pfunc = reduce; printf("reduce:%d\n", pfunc(3, 4)); /*getchar是用VS編寫方便檢視輸出*/ getchar(); return 0; }
歡迎關注微信公眾號-嵌入式Linux
覺得不錯,請幫忙轉發,點贊,您的每一次支援,我都將銘記於心