日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c语言 万能函数指针,C/C++编程笔记:C语言精华解析之void *指针,指针中的万能指针...

發布時間:2024/1/1 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 万能函数指针,C/C++编程笔记:C语言精华解析之void *指针,指针中的万能指针... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是萬能指針?

萬能指針其實就是void *類型的指針,而void *指針一般被稱為通用指針或叫泛指針。它是C語言關于純粹地址的一種約定。當某個指針是void型指針時,所指向的對象不屬于任何類型。 因為void指針不屬于任何類型,不可以對其進行算術運算,比如自增,編譯器不知道其自增需要增加多少。

而對于char *型指針,自增一定是指針指向的地址加1,int*型指針自增,則偏移4。這個在指針的運算中p+n的解釋中已經很詳細的介紹過,這里不再累贅,有興趣的可以自行查閱。

在C/C++中,在任意時刻都可以使用其它類型指針來代替void指針,或者用void指針來代替其他類型指針。?這樣就可以衍生出很多比較有用的技巧。指針的本質,是其值為一個地址,那么延伸一下: 當使用關鍵字void聲明指針變量時,它將成為通用指針變量。任何數據類型(char,int,float等)的任何變量的地址都可以賦值給void指針變量。這就是為什么把它稱之為萬能指針了。

萬能指針使用規則

(1)使用前必須被初始化

(2)解引用過程必須強制轉換

萬能指針能被任何類型指針初始化,萬能指針也和其他類型指針一樣,可以當做函數參數,函數返回值,以及充當函數指針皆可。

萬能指針操作基本數據類型

對指針變量的解引用,使用間接運算符*達到目的。但是在使用空指針的情況下,需要轉換指針變量以解引用。這是因為空指針沒有與之關聯的數據類型。編譯器無法知道void指針指向的數據類型。因此,要獲取由void指針指向的數據,需要使用在void指針位置內保存的正確類型的數據進行類型轉換。

萬能指針充當函數返回值

萬能指針充當函數返回值直接看下庫中提供的動態內存申請函數即可,自己想要寫的話稍微麻煩些,動態申請內存函數如下:

而我們在實用的時候為什么要強制轉換就一目了然了。

萬能指針充當函數參數

當我們想要設計一個可以傳入任何類型的指針的函數的時候,我們就可以把參數設計為void *類型,而對于這類函數,內存的重新申請realloc函數其實也是void *的參數,很多操作內存的函數,參數設計其實都是void *類型的指針,如果你對于C語言掌握的可以,我相信下面兩個函數你應該都了解過:

萬能指針充當函數指針調用函數

雖說萬能指針充當函數指針調用函數的方式真正自己開發的時候很少用,但是有幸我的學生面試的時候就遇到過這樣的一道筆試題,所以在這里就給大家講解下,如下代碼,實現通過萬能指針對函數的調用:

別人會問題 (*(void(*)())pVoid)()是做什么的? 初看,大家是不是滿腦子黑人問號?其實結合上面的代碼看,就知道其實就是一個無返回值無參函數通過萬能指針調用而已。考究的無非以下C語言知識:

(1)函數指針調用函數: (*函數指針名)(參數表);

(2)強制轉換語法:(目標類型)變量

(3)指針的類型: 去掉變量名剩下的就是指針的類型

而對函數print的函數指針是 :void (*p)() ,其實就是用(*p)替換函數名,就是該函數的函數指針,所以去掉變量名剩下的就是指針的類型,即:void (*)() ,然后pVoid 調用函數的方式: (*pVoid)(); 然后把類型拿過來強制轉換即可得到:(*(void(*)())pVoid)(),明白了吧!就這么簡單。

ps: 在單片機開發中,萬能指針往往用來實現數據的非易失存儲。所謂非易失存儲,就是數據改寫后在掉電后仍然能保持。有興趣的可以自我拓展下哦!

自學C/C++編程難度很大,如果你想更快提升自己的編程能力和編寫項目的水平,歡迎一起共同成長!

C語言C++編程學習交流圈子,QQ群【757874045點擊進入】微信公眾號:C語言編程學習基地

有一些源碼和資料分享,歡迎轉行也學習編程的伙伴,和大家一起交流成長會比自己琢磨更快哦!

內容來源于網絡如有侵權請私信刪除

總結

以上是生活随笔為你收集整理的c语言 万能函数指针,C/C++编程笔记:C语言精华解析之void *指针,指针中的万能指针...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。