簡體   English   中英

為什么`memmove`使用`void *`作為參數而不是`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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM