[指標] 函數指標

函數跟一般變數一樣具有位址
經過編譯後所產生的機器碼起始處
也就是說
函數名稱本身記錄著函數的起始位址
像陣列名稱一樣
也記載著第一個元素的位址

指標可以指向變數
也可以指向另一個指標
更可以指向函數
這種指標稱為「函數指標」

定義格式:
欲指向的函數傳回值型態 (*指標變數名稱) (型態1 引數1 ,型態2 引數2 ,……..);

將指標指向函數格式:
指標名稱=函數名稱;

之後就可以利用函數指標呼叫函數

Ex:

 

[code language=”cpp”]
#include <iostream>
using namespace std;

void show(int); //函數原型宣告

int main(){

void (*ptr) (int n); //宣告函數指標
ptr=show; //將指標指向函數

(*ptr)(5); //利用指標呼叫函數

}

//函數定義
void show(int n){

for(int k=1;k<=n;k++){

cout << "Bellow!" << endl;

}

}

[/code]

傳遞函數到其他函數中:
函數名稱本身可以視為一個指標
因此函數也可以當成引數傳遞到另一個函數
我們現在假設有一個show()函數
用來印出另一個函數的傳回值
show()的原型可以這樣寫
void show(double,double,double (*ptr)(double,double));
前面兩個引數是另一個函數的引數
最後一個引數是函數指標
因為要在函數裡面再呼叫另一個函數
要記得也要把引數都帶進去
show()函數定義
void show(double x,double y,double (*ptr)(double,double))
{
   cout << (*ptr)(x,y) << endl;
}
Ex:

[code language=”cpp”]
#include <iostream>
using namespace std;
double rectangle(double,double);
void show(double,double,double (*ptr)(double,double));
int main(void)
{
cout << "rectangle(4,6.1)=";
show(6,7.52,rectangle); // 呼叫rectangle(),並印出其值

}

double rectangle(double height,double width)
{
return (height*width);
}

void show(double x,double y,double (*ptr)(double,double))
{

cout << (*ptr)(x,y) <<span style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" data-mce-type="bookmark" class="mce_SELRES_start"></span>< endl;

}
[/code]

有疑問? 留個言吧!

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料