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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...

發(fā)布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在C語言程序開發(fā)中,動態(tài)內(nèi)存分配是不可避免的,而調(diào)用 malloc()/free() 庫函數(shù)實現(xiàn)這一過程是方便的,事實上,在很多C語言程序中,malloc/free 庫函數(shù)的使用相當(dāng)頻繁,它倆的C語言函數(shù)原型如下,請看:

void *malloc(size_t size);void free(void *ptr);

malloc() 函數(shù)需要類型轉(zhuǎn)換嗎?

正常情況下,malloc() 函數(shù)會從堆中申請 size 字節(jié)的內(nèi)存,并且將這塊內(nèi)存的首地址返回,原則上,系統(tǒng)不會再將被 malloc() 申請的內(nèi)存分配給其他代碼使用,除非 free() 函數(shù)將 malloc() 申請的內(nèi)存釋放。

malloc() 函數(shù)需要類型轉(zhuǎn)換嗎?

讀者應(yīng)該注意到,malloc() 函數(shù)的返回值是 void * 指針型的。看過我之前文章的讀者應(yīng)該明白,在C語言中,void * 指針是不能夠直接用于索引數(shù)據(jù)的。

void * 指針是不能夠直接用于索引數(shù)據(jù)的

因此在實際的C語言程序開發(fā)中,程序員調(diào)用 malloc() 函數(shù)時,一般都會定義其他類型的指針,例如:

char *cp = malloc(size);

讀者看到這里,可能會產(chǎn)生疑問:malloc() 函數(shù)的返回值類型是 void * 指針型,而變量 cp 則是 char * 指針型,似乎出現(xiàn)了類型不匹配的情況,是否需要類型轉(zhuǎn)換呢?

是否需要類型轉(zhuǎn)換呢?

事實上,的確不少C語言程序員在調(diào)用 malloc() 函數(shù)時會使用類型轉(zhuǎn)換:

char *cp = (char *)malloc(size);int *ip = (int *)malloc(size * sizeof(int));...

那么,調(diào)用 malloc() 函數(shù)時,究竟需要不需要類型轉(zhuǎn)換呢?

不需要?

有程序員認(rèn)為,C語言經(jīng)過這么多年的發(fā)展,對于 malloc() 函數(shù),如今似乎不再需要類型轉(zhuǎn)換了,因為 void * 指針會自動的并且安全的被轉(zhuǎn)換為對應(yīng)類型的指針。void * 指針在很多C語言教材中被稱為“萬能指針”,這里就是一個體現(xiàn)。

void * 指針在很多C語言教材中被稱為“萬能指針”

既然 void * 指針可以自動的被轉(zhuǎn)換成對應(yīng)的指針類型,那么再寫類型轉(zhuǎn)換代碼似乎就“多余”了,反而會讓整個C語言代碼啰嗦臃腫,損失可讀性,尤其是指針類型名很長的時候,例如:

struct this_is_test *p = (struct this_is_test *)malloc(size);// 不寫類型轉(zhuǎn)換代碼struct this_is_test *p = malloc(size);

上面的C語言代碼顯然有重復(fù)部分,而且這段重復(fù)的C語言代碼的“類型轉(zhuǎn)換功能”也是多余的,要是以后需要修改結(jié)構(gòu)體 this_is_test 的名字,還需要修改強制類型轉(zhuǎn)換部分的代碼,略顯繁瑣。與之相對的,下面這行C語言代碼明顯簡潔許多。

下面這行C語言代碼明顯簡潔許多

這么看來,似乎對 malloc() 函數(shù)做類型轉(zhuǎn)換“百害而無一利”了,有程序員甚至認(rèn)為,在C語言程序開發(fā)中,調(diào)用 malloc() 函數(shù)使用類型轉(zhuǎn)換,只是因為不知道類型轉(zhuǎn)換會帶來的潛在不利而已。

需要?

不過,也有C語言程序員持反對意見,他們認(rèn)為,在調(diào)用 malloc() 時使用類型轉(zhuǎn)換可以讓代碼在 C語言和C++之間可移植,有些程序員以為自己在寫C語言程序,但是他們實際上還是會用到C++的一些特性。

在 C語言和C++之間可移植

另外,調(diào)用 malloc() 函數(shù)使用類型轉(zhuǎn)換還可以發(fā)現(xiàn)一些潛在的風(fēng)險,例如有的C語言程序員會在開發(fā)中弄混 type * 和 type ** ,如果沒有顯式的類型轉(zhuǎn)換,這樣的錯誤就會被編譯器隱藏掉了。

因此,在對 malloc() 函數(shù)的返回值做數(shù)據(jù)類型轉(zhuǎn)換的過程,本身就是C語言程序員自檢代碼的過程,這樣更加容易在開發(fā)階段就發(fā)現(xiàn) bug。而且,如果C語言程序出現(xiàn)了數(shù)據(jù)類型相關(guān)的錯誤,調(diào)用 malloc() 函數(shù)做了類型轉(zhuǎn)換肯定能夠更加方便的定位錯誤。

小結(jié)

弄清楚在C語言程序開發(fā)中調(diào)用 malloc() 函數(shù)時,做不做類型轉(zhuǎn)換的各自特點后,應(yīng)該能夠發(fā)現(xiàn)其實各有各的好處,那究竟是否需要做類型轉(zhuǎn)換,就在于程序員自己的開發(fā)習(xí)慣了。

點個贊再走吧

歡迎在評論區(qū)一起討論,質(zhì)疑。文章都是手打原創(chuàng),每天最淺顯的介紹C語言、linux等嵌入式開發(fā),喜歡我的文章就關(guān)注一波吧,可以看到最新更新和之前的文章哦。

總結(jié)

以上是生活随笔為你收集整理的c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。