函數指針和指針函數是不是一個東西?
這兩個我們之前都有講過,但是并沒有放在一起比較過。
函數指針的本質是指針,就跟整型指針、字符指針一樣,函數指針指向的是一個函數。
每個函數在內存中都會有一個地址,函數調用就是跳轉到這個地址開始執行,而函數指針就是記錄這個地址的變量。
?
定義起來稍微有點麻煩:
#include比如test函數,想要記錄他的地址,可以這樣定義指針p:inttest(inta) { return a; } int main() { int (*p)(int) = test; return 0; }
int (*p)(int) = test;p是個指針,指向函數,函數有一個int類型的參數,函數的返回值是int。
調用函數的時候,不僅可以通過函數名來調用,也可以通過函數指針p來調用:
test(1); p(1);函數指針有什么用?
他的用處很大,比如C語言里面的回調函數,或者在結構體里面存放函數,都可以用函數指針來解決,不清楚的,可以翻翻以前的視頻。
指針函數的本質是函數,就像整型函數返回的是整型一樣,指針函數返回的是指針。
于是我們可以隨手寫一個數組,返回數組的名字,因為數組名就是地址。
int *test() { int array[5] = {0}; return array; }這是一個典型的錯誤,切記不能返回局部變量的地址,因為函數調用完畢,內存釋放,即使返回了這個地址,也不能使用。
可以返回堆空間地址,也可以返回全局變量地址,或者是靜態變量地址都可以,這種返回地址的函數就叫指針函數。
那把這兩個概念結合起來會怎么樣?
可以,就叫指針函數指針:
int *(*p)() = test;意思就是定義一個指針,讓他指向剛才的指針函數,這就是C語言中的復雜類型聲明,開發中確實很少會用到,但是筆試中出現的概率高達80%,所以,不要覺得它沒用,想要學好C語言,務必得學會分析。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
函數指針
+關注
關注
2文章
55瀏覽量
3760 -
指針函數
+關注
關注
0文章
10瀏覽量
2729
原文標題:兩分鐘來搞懂函數指針和指針函數
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
指針作為函數參數
指針作為函數參數
大多數C程序員開始使用指針時是用它們實現函數的參數,所謂可變參數。為了理解可變參數是如何工作的,我們看看在C語言中如何執行一
發表于 07-29 11:49
?2678次閱讀
評論