[指標] 函數指標

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

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

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

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

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

Ex:

 

#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;
  
 }
 
}

傳遞函數到其他函數中:
函數名稱本身可以視為一個指標
因此函數也可以當成引數傳遞到另一個函數
我們現在假設有一個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:
#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;
   
}

有疑問? 留個言吧!

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