不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

为什么memcpy中要指定const void *

void copyBytes(char *x, char *y, int howMany)

首先是你的指针char *,这意味着除了char *需要显式转换之外的任何指针类型.您应该使用void *,隐式转换指针类型.

uint16_t a, b;

copyBytes(&a, &b, sizeof(a));  // &a and &b are uint16_t*, not char*.

第二,来源,y不是const,这意味着如果您通过const来源,您将收到警告.

char buf[512];
const char str[] = "Hello world";  // Contents of string are constant.
copyBytes(buf, str, sizeof(str));  // With your code, this produces a warning.

第三,howMany签名,意味着您可以传递负值.

我会推荐这样的签名(顺便说一句,这非常相似memcpy):

void copyBytes(void *x, const void *y, size_t howMany)

第四个批评... libc memcpy可能会更好地进行优化,使用大于字节的单位,特定于平台的性能技巧(例如:内联汇编,x86上的SSE)等等.还有memmove更好的指定行为.缓冲区重叠.

总结:为了学习的目的,自己编写这些例程是很好的,但是通常你会更好地使用C库.

posted on   皮皮祥  阅读(92)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-11-29 Markdown基本语法
2021-11-29 2k跟1080p显示器区别
点击右上角即可分享
微信分享提示