4

c ライブラリ関数の定義はmemmove次のようになります。

void* memmove(void *s1, const void *s2, size_t n)
{
    char *sc1;
    const char *sc2;

    sc1 = s1;
    sc2 = s2;
    ...
}

なぜvoid*andconst 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}

4

2 に答える 2

6

char*andが使用されている場合は、他の型を呼び出すときconst char*に常にキャストする必要があります。char*memmove

void*とを使用const void*することで、より短いコードを記述でき、キャストによるパフォーマンスのオーバーヘッドがなくなります。

于 2015-08-03T05:21:33.863 に答える
4

void *汎用ポインター型です。memmoveメモリ内のオブジェクトのタイプに関係なく、メモリを操作することになっています。

についても同様ですmemcpy。文字列を操作することになっているため、パラメータstrcpyを使用するものと比較してください。char *

于 2015-08-03T04:57:15.580 に答える