函數指針: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是一個指針變量,不像
函數名稱那樣是死的,它可以指向任何函數
注意,指向函數的指針變量沒有++和--運算
#################################################################################