国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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)遵守國家法律
花莲县| 白山市| 炎陵县| 龙州县| 建水县| 渭源县| 永登县| 临泉县| 安平县| 张北县| 呼图壁县| 白银市| 萨嘎县| 河西区| 云林县| 华宁县| 富宁县| 永平县| 渭南市| 原平市| 阜康市| 龙门县| 淮北市| 邹城市| 南乐县| 阿克苏市| 保靖县| SHOW| 鄢陵县| 武安市| 揭东县| 手游| 石城县| 达拉特旗| 金川县| 新泰市| 兴仁县| 祁阳县| 清水县| 武强县| 出国|