函數(shù)指針和指針函數(shù)是不是一個東西?
這兩個我們之前都有講過,但是并沒有放在一起比較過。
函數(shù)指針的本質(zhì)是指針,就跟整型指針、字符指針一樣,函數(shù)指針指向的是一個函數(shù)。
每個函數(shù)在內(nèi)存中都會有一個地址,函數(shù)調(diào)用就是跳轉(zhuǎn)到這個地址開始執(zhí)行,而函數(shù)指針就是記錄這個地址的變量。 ?
定義起來稍微有點麻煩:
#include比如test函數(shù),想要記錄他的地址,可以這樣定義指針p:inttest(inta) { return a; } int main() { int (*p)(int) = test; return 0; }
int (*p)(int) = test;p是個指針,指向函數(shù),函數(shù)有一個int類型的參數(shù),函數(shù)的返回值是int。
調(diào)用函數(shù)的時候,不僅可以通過函數(shù)名來調(diào)用,也可以通過函數(shù)指針p來調(diào)用:
test(1); p(1);函數(shù)指針有什么用?
他的用處很大,比如C語言里面的回調(diào)函數(shù),或者在結(jié)構(gòu)體里面存放函數(shù),都可以用函數(shù)指針來解決,不清楚的,可以翻翻以前的視頻。
指針函數(shù)的本質(zhì)是函數(shù),就像整型函數(shù)返回的是整型一樣,指針函數(shù)返回的是指針。
于是我們可以隨手寫一個數(shù)組,返回數(shù)組的名字,因為數(shù)組名就是地址。
int *test() { int array[5] = {0}; return array; }這是一個典型的錯誤,切記不能返回局部變量的地址,因為函數(shù)調(diào)用完畢,內(nèi)存釋放,即使返回了這個地址,也不能使用。
可以返回堆空間地址,也可以返回全局變量地址,或者是靜態(tài)變量地址都可以,這種返回地址的函數(shù)就叫指針函數(shù)。
那把這兩個概念結(jié)合起來會怎么樣?
可以,就叫指針函數(shù)指針:
int *(*p)() = test;意思就是定義一個指針,讓他指向剛才的指針函數(shù),這就是C語言中的復(fù)雜類型聲明,開發(fā)中確實很少會用到,但是筆試中出現(xiàn)的概率高達80%,所以,不要覺得它沒用,想要學(xué)好C語言,務(wù)必得學(xué)會分析。
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
函數(shù)指針
+關(guān)注
關(guān)注
2文章
56瀏覽量
3835 -
指針函數(shù)
+關(guān)注
關(guān)注
0文章
10瀏覽量
2806
原文標題:兩分鐘來搞懂函數(shù)指針和指針函數(shù)
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
函數(shù)指針的使用簡述
函數(shù)指針在Linux內(nèi)核和C語言開發(fā)中用的非常多,而且在設(shè)計操作系統(tǒng)的時候也會用到,因此這里將詳細講解函數(shù)指針。既然函數(shù)
![<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>的使用簡述](https://file.elecfans.com/web2/M00/68/63/pYYBAGMZ4zOAHKm3AAAxVPPAzsw888.png)
一文詳解函數(shù)指針與回調(diào)函數(shù)
函數(shù)指針是指向函數(shù)的指針變量。它允許我們將函數(shù)作為參數(shù)傳遞給其他函數(shù)或?qū)?/div>
發(fā)表于 08-22 10:36
?552次閱讀
指針作為函數(shù)參數(shù)
指針作為函數(shù)參數(shù)
大多數(shù)C程序員開始使用指針時是用它們實現(xiàn)函數(shù)的參數(shù),所謂可變參數(shù)。為了理解可變參數(shù)是如何工作的,我們看看在C語言中如何執(zhí)行一
發(fā)表于 07-29 11:49
?2725次閱讀
函數(shù)指針和指針函數(shù)定義
函數(shù)指針和指針函數(shù),C語言學(xué)習(xí)中最容易混淆的一些概念,好好學(xué)習(xí)吧
發(fā)表于 01-11 16:44
?0次下載
c語言函數(shù)指針定義,指針函數(shù)和函數(shù)指針的區(qū)別
往往,我們一提到指針函數(shù)和函數(shù)指針的時候,就有很多人弄不懂。下面就由小編詳細為大家介紹C語言中函數(shù)
發(fā)表于 11-16 15:18
?3648次閱讀
ARM的函數(shù)指針、指針函數(shù)的區(qū)別和用法
在學(xué)習(xí)arm過程中發(fā)現(xiàn)這“指針函數(shù)”與“函數(shù)指針”容易搞錯,所以今天,我自己想一次把它搞清楚,找了一
C語言-內(nèi)聯(lián)函數(shù)、遞歸函數(shù)、指針函數(shù)
這篇文章介紹C語言的內(nèi)聯(lián)函數(shù)、遞歸函數(shù)、函數(shù)指針、指針函數(shù)、局部地址、const關(guān)鍵字、exte
如何使用函數(shù)指針?
在程序中定義一個函數(shù),則編譯時系統(tǒng)就會為這段代碼分配一段存儲空間,這段存儲空間的首地址稱為函數(shù)的地址,且
函數(shù)指針的基本概念和語法
函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 8 個函數(shù)
面試???1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組
在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針和指針數(shù)組是一
![面試???1:<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>與<b class='flag-5'>指針</b><b class='flag-5'>函數(shù)</b>、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
評論