指向函式的指標

2022-08-18 01:36:12 字數 1526 閱讀 2044

指標不僅可以指向資料,也可以指向函式,假設編寫了integrated的函式用來求a和b點之間的函式f的積分。我們希望函式integrate通過傳遞f作為實際引數的方式變得更為通用

函式integrate的原型如下:

double integrate( double (*f)(double),double a, double b);

*f周圍的圓括號說明f是個指向函式的指標,而不是函式的返回值為指標,把f宣告成好像就是函式也是合法的

double integrate( double f(double),double a, double b);

編譯器看來,這種原型和前一種形式是完全一樣

在呼叫函式integrate時,把乙個函式名作為第乙個實際引數,如:

result = integrate(sin,0,0,pi/2);

sin後邊沒有圓括號,當函式名後邊沒有圓括號時,c語言編譯器會產生指向函式的指標來代替產生函式呼叫的**,在此例中不是在呼叫函式sin,二十給函式integrate傳遞了乙個指向函式sin的指標,和c語言處理陣列一樣,如果a是陣列的名字,a[i]就表示陣列的乙個元素,而a本身作為指向陣列的指標,類似,如果f是函式,那麼c語言把f(x)當成函式的呼叫來處理,而f本身則是指向函式的指標

integrate函式體內,可以呼叫f所指向的函式:例如:sum += (*f)(x);

c語言對待指向函式的指標就像對待指向資料的指標一樣,我們可以把函式指標儲存在變數中,或者用作陣列的元素

void (*pf)(int) pf可以指向任何返回void以以乙個int為引數的函式

函式指標陣列有很大的用途, 例如正在編寫的程式用來顯示使用者選擇格式的命令選單,可以編寫函式實現這些命令,

void (*file_cmd)(void) =

再例如:

int (*s[10]) (int)定義函式指標陣列

float (**def)[10] :def 是乙個二級指標,它指向的是乙個一維陣列的指標,陣列的元素都是float

double *(*gh)[10];,gh是乙個指標,它指向乙個一維陣列,它的元素都是double *的

double (*f[10])( ); :f是乙個陣列,f有10個元素,元素都是函式的指標,指向的函式型別都是沒有引數,返回double型別的資料

int *(*b)[10]

指向函式的指標 函式指標

如果在程式中定義了乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始 又稱入口 位址 稱為這個函式的指標。指標即是位址 我們定義乙個指標變數,這個指標變數指向乙個整型資料變數的位址,我們稱指向乙個整型資料的指標變數 那麼它指向乙個函式的位址,稱為指向乙個函式的指標變數。形如 i...

函式指標 指向函式的指標

乙個函式總是占用一段連續的記憶體區域,函式名在表示式中有時也會被轉換為該函式所在記憶體區域的首位址,這和陣列名非常類似。我們可以把函式的這個首位址 或稱入口位址 賦予乙個指標變數,使指標變數指向函式所在的記憶體區域,然後通過指標變數就可以找到並呼叫該函式。這種指標就是函式指標。函式指標的定義形式為 ...

指向函式的指標,指向函式的指標作為函式引數

1.基本法 include pragma warning disable 4996 pragma warning disable 4715 指向函式的指標作為函式的引數 有兩個整數a,b,讓使用者輸入1,2或者3,當輸入1時,給出相對大值,當輸入2時,給出相對小值,當輸入3時,給出兩者之和 1.可以...