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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

malloc() 函數需要類型轉換嗎?

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

malloc() 函數需要類型轉換嗎?

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

void * 指針是不能夠直接用于索引數據的

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

char *cp = malloc(size);

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

是否需要類型轉換呢?

事實上,的確不少C語言程序員在調用 malloc() 函數時會使用類型轉換:

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

那么,調用 malloc() 函數時,究竟需要不需要類型轉換呢?

不需要?

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

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

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

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

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

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

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

需要?

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

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

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

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

小結

弄清楚在C語言程序開發中調用 malloc() 函數時,做不做類型轉換的各自特點后,應該能夠發現其實各有各的好處,那究竟是否需要做類型轉換,就在于程序員自己的開發習慣了。

點個贊再走吧

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

總結

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

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