函式名/函式地址/函式指標

劍西樓發表於2017-02-13

轉自:http://hi.baidu.com/%C6%BF%D6%D0%B5%C4%C5%AE%CE%D7/blog/item/387db9ddaa54d0a9cd1166fa.html


函式指標:1。指標變數 2。指標變數指向函式

這正如用指標變數可指向整型變數、字元型、陣列一樣。

在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址

可利用該指標變數呼叫函式就如同用指標變數可引用其他型別變數一樣,在這些概念上

一致的。事實上,每一個函式,即使它不帶有返回某種型別的指標,它本身都有一個入口

地址,該地址相當於函式名

 儘管函式不是變數,但它在記憶體中仍有其實體地址,該地址能夠賦給指標變數。獲取函式

方法是:用不帶有括號和引數的函式名得到。

函式名相當於一個指向其函式入口指標常量。   

函式名後面加圓括號,表示函式呼叫

若要得到函式的地址,直接用函式名就可以了

##############################################################

 指標/函式和函式/指標的區別

  1,   指標函式:指帶指標的函式,即本質是一個函式

        2.   指標函式返回型別是某一型別的指標

##############################################################

函式指標有兩個用途:呼叫函式做函式的引數。函式指標的說明方法為:

  資料型別標誌符 (指標變數名)(形參列表);

  注1:“函式型別”說明函式的返回型別由於“()”的優先順序高於“*”,所以指標變數名

外的括號必不可少,後面的“形參列表”表示指標變數指向的函式所帶的引數列表。例

  int func(int x); /* 宣告一個函式 */

  int (*f) (int x); /* 宣告一個函式指標 */

  f=func; /* 將func函式的首地址賦給指標f */

  賦值時函式func不帶括號,也不帶引數,func代表函式的首地址

  注2:函式括號中的形參可有可無,視情況而定。

  下面的程式說明了函式指標呼叫函式的方法:

  例一、

  #include

  int max(int x,int y){ return(x>y?x:y); }

  void main()

  {

  int (*ptr)(int, int);

  int a,b,c;

  ptr=max;

  scanf("%d,%d",&a,&b);

  c=(*ptr)(a,b);

  printf("a=%d,b=%d,max=%d",a,b,c);

  }

 實際上ptr和max都指向同一個入口地址,不同就是ptr是一個指標變數,不像

函式名稱那樣是死的,它可以指向任何函式

注意,指向函式的指標變數沒有++和--運算

#################################################################################  

相關文章