C-memmove 的函数原型是void *memmove(char *dest, const char *src, size_t count);当出现重叠时,岂不是改变了const 指针所指的内容?
dest 和src部分重叠时,而又要把*src赋给*dest,不就是相当于改变了*src,而*src由被定义为const???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,src 指向的内容会被改变。不能通过一个const指针来修改一块内存,不表示const指针指向的内存是不可变的,例如可以通过其他非 const 指针修改。举例:
memmove 就是这种情况,他的原型告诉你他只会通过 src 读,不会(也不能)通过src写,而通过dest可以进行读和写。
如果src指向的字符串常量,然后你把src强转成非const的dest(编译器会警告你的),然后通过dest修改那就会Segmentation fault,因为字符串常量是真的不可变的。
更多const细节可以看一下@C语言中的const实现机制