我目前正在重新編程一些 C 庫。所以我的問題是:為什么memchr需要一個const void *s指標而不是簡單的字符指標?
我看到您可能可以搜索其他內容,但是該函式實際上稱為memchr,那么為什么要使用 void 指標呢?
提前致謝!
uj5u.com熱心網友回復:
C 的早期開發涉及大量將事物視為單個位元組并允許程式員訪問表示物件的位元組。這個名字memchr反映了那段歷史,現在不能輕易改變。
void被添加到語言中以提供一種型別,從某種意義上說,“有些東西在那里,但這是靈活的。” 第一個引數memchr具有型別const void *,因為該例程可用于在任何型別的物件中搜索位元組,而不需要主要是字符陣列的物件。
uj5u.com熱心網友回復:
string.h這與在使用中宣告其他函式的原因相同void*:避免強制轉換。
也許你是對的,這個名字有誤導性,特別是考慮到它是string.h. 再說一次,memmove, memcmp, memset, 等等...
uj5u.com熱心網友回復:
在void1989 年的標準 ( ) 中引入資料型別之前-std=c89,函式就像memchr()take一樣const char *,因為那是當時最接近通用指標的東西。
如果const char *今天在場,您將需要從 施展x *到const char *。
您也可以通過類比來理解這一點:
strcpy()-> 字串復制memcpy()-> 記憶體(二進制)復制
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464892.html
上一篇:第二次呼叫方法后價值丟失
下一篇:在類中正確使用參考
