函数名/函数地址/函数指针
| 轉自: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是一個指針變量,不像 函數名稱那樣是死的,它可以指向任何函數 注意,指向函數的指針變量沒有++和--運算 ################################################################################# |
總結
以上是生活随笔為你收集整理的函数名/函数地址/函数指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux字符界面和图形界面
- 下一篇: fork source exec区别差异