最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)遵守國家法律
新建县| 罗定市| 威信县| 武邑县| 兴业县| 涪陵区| 黎平县| 南投市| 临高县| 晴隆县| 普兰店市| 龙陵县| 屯门区| 达孜县| 清徐县| 古交市| 麻栗坡县| 汾西县| 哈尔滨市| 江安县| 丰宁| 扎鲁特旗| 涟水县| 巴林左旗| 抚宁县| 留坝县| 通城县| 高雄县| 康马县| 营山县| 樟树市| 平塘县| 梁山县| 客服| 芦溪县| 明溪县| 碌曲县| 汝州市| 乌拉特后旗| 砀山县| 西华县|