五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C語言使用void *類型作為函數(shù)形參

2022-06-23 02:45 作者:鳧水億  | 我要投稿

相信大家已經(jīng)見識(shí)過C語言的厲害之處,但這也是最燒腦的地方,即高自由度產(chǎn)生的高不可控性。假如有這樣一種場(chǎng)景:功能差不多,但受限于參數(shù)類型,寫了多個(gè)函數(shù)。

此時(shí)可以使用void *類型傳遞參數(shù),然后在函數(shù)內(nèi)部對(duì)類型進(jìn)行判斷,切換到不同數(shù)據(jù)類型處理不同的數(shù)據(jù)。

為實(shí)現(xiàn)功能,要實(shí)現(xiàn)以下內(nèi)容:

  • ????枚舉1:定義數(shù)據(jù)類型

  • ????枚舉2:定義數(shù)據(jù)類型的長度

  • ????測(cè)試函數(shù)聲明

  • ????main函數(shù)

  • ????測(cè)試函數(shù)實(shí)現(xiàn)

看上去可行,讓我們嘗試寫出代碼。


使用枚舉定義數(shù)據(jù)類型

使用結(jié)構(gòu)體定義一些數(shù)據(jù)


使用枚舉定義數(shù)據(jù)結(jié)構(gòu)體數(shù)據(jù)類型長度

測(cè)試函數(shù)聲明

測(cè)試函數(shù)實(shí)現(xiàn)

結(jié)構(gòu)體變量賦值

使用結(jié)構(gòu)體指針

函數(shù)調(diào)用

結(jié)合起來,得到了最終代碼

輸出結(jié)果:


讓我們來看看測(cè)試函數(shù)聲明:

void *data為任意類型指針,void不是此時(shí)不是空的含義,而是“任意”的含義,可以將其進(jìn)行類型轉(zhuǎn)換。

enum datatype type是枚舉數(shù)據(jù)類型,更確切的說是enum datatype類型,type是類型的變量,函數(shù)的形參。

int datalength是數(shù)據(jù)類型的長度,也可以直接使用枚舉類型傳遞給int datalength,因?yàn)樵诰幾g的某個(gè)階段,枚舉就像宏展開一樣被替換掉,但枚舉只能為整型,宏可以為其他類型,這也是為什么調(diào)用test函數(shù)時(shí),可以直接使用枚舉,放在int datalength形參的位置。

測(cè)試函數(shù)的實(shí)現(xiàn)

本打算使用malloc重新分配一塊內(nèi)存進(jìn)行使用,但發(fā)現(xiàn)冒號(hào)后面不能聲明變量,只能執(zhí)行語句,{加了大括號(hào)括起來就可以了},據(jù)說代碼塊概念來自于lisp語言,本想使用malloc分配一塊內(nèi)存,再進(jìn)行強(qiáng)制轉(zhuǎn)換,經(jīng)過查閱資料,不使用malloc照樣可以使用,這是因?yàn)樽兞棵恍枰峙鋬?nèi)存空間。那么僅剩最后一個(gè)問題,將void *類型轉(zhuǎn)化為其他類型指針,可switch case已經(jīng)幫我們選擇的類型,如果再強(qiáng)制轉(zhuǎn)換是不是多此一舉,但不轉(zhuǎn)換又沒法使用,那怎么辦?

有一種很直接的辦法--直接賦值,將void *類型賦值給 int *、char *或者float *都是可以的。

然后使用新的指針即可


C語言使用void *類型作為函數(shù)形參的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
寿光市| 紫阳县| 楚雄市| 泰州市| 庆元县| 囊谦县| 蒙阴县| 顺平县| 溧阳市| 富裕县| 满洲里市| 桑日县| 溧水县| 吉木萨尔县| 泰兴市| 庆安县| 个旧市| 台北县| 三江| 南昌县| 江城| 乌兰浩特市| 漯河市| 大竹县| 平远县| 仪陇县| 县级市| 彝良县| 中山市| 盘锦市| 嵊泗县| 曲阜市| 隆子县| 孝感市| 铜陵市| 古蔺县| 武陟县| 通州区| 南溪县| 伊川县| 遵化市|