![](/img/trans.png)
[英]Why does this function accept a `const char*` as a parameter instead just `char*`?
[英]Why does `memmove` use `void *` as parameter instead of `char *`?
c庫函數memmove
的定義如下:
void* memmove(void *s1, const void *s2, size_t n)
{
char *sc1;
const char *sc2;
sc1 = s1;
sc2 = s2;
...
}
我想知道為什么我們需要使用void*
和const void*
作為參數的類型。 為什么不直接char*
和const char*
?
int test_case[] = {1, 2, 3, 4, 5, 6, 7, 8, 10};
memmove(test_case+4, test_case+2, sizeof(int)*4);
輸出:test_case = {1,2,3,4,3,4,5,6,10}
如果使用char*
和const char*
,那么在調用其他類型的memmove
時,我們必須始終轉換為char*
。
通過使用void*
和const void*
,我們可以編寫更短的代碼,並且轉換沒有性能開銷。
void *
是通用指針類型。 memmove
應該操縱內存,無論內存中有什么類型的對象。
同樣對於memcpy
。 將它與使用char *
參數的strcpy
進行比較,因為它應該操縱字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.