gpt4 book ai didi

c - memmove 中的 "const void*"是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 16:45:42 25 4
gpt4 key购买 nike

memmove/memcpy/strcpy 原型(prototype)中的第二个参数类似:例如:

void *memmove(void *dest, const void *src, size_t n); //const void*
char *strcpy(char *dest, const char *src); //const char*

但显然,如果 dest 和 src 重叠,那么 src 的内容将被更改,违反 const void/char *?

最佳答案

const void* 表示引用对象不会通过该指针被修改。

如果有其他非常量指针指向同一个对象(也称为“别名”),那么当然仍然可以通过这些指针对其进行修改。在您描述的场景中,另一个指针是 dest

顺便说一下,在 strcpy 的情况下,如果区域重叠,则行为未定义,在 C99 中,签名是 char *strcpy(char * restrict s1, const char * restrict s2);。但是对于 memmove,别名是可以的。通过为它提供重叠区域,您已授予它修改 dest 区域的“权限”,它会这样做。

关于c - memmove 中的 "const void*"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com