gpt4 book ai didi

C题: (const void *) vs (void *)

转载 作者:太空狗 更新时间:2023-10-29 16:22:35 27 4
gpt4 key购买 nike

const void *void * 有什么区别?在什么情况下可以将 void 指针转换为 const void 指针?

最佳答案

const void * 指向不应修改的内存。

void *(非常量)指向可以修改的内存(但不能通过 void *;您必须先转换它)。

当你使用memmove()时,源地址被转换为const void *:

void *memmove(void *dst, const void *src, size_t nbytes);

这是一个例子,当一个 void 指针可以转换为一个常量 void 指针时。基本上,当您知道不会修改指针指向的内存时,您可以随时执行此操作(转换为常量)。这适用于任何指针 - 而不仅仅是空指针。

以另一种方式转换(从常量指针到非常量指针)是一个更危险的练习。不能保证实际指向的内存是可修改的;例如,字符串文字可以存储在只读(常量)内存中,如果您通过强制转换丢失了常量并尝试修改字符串,您可能会遇到段错误或类似的错误 - 您的程序会突然停止并且不在你的控制之下。这不是一件好事。因此,在不确定对编译器撒谎是否真的可以之前,不要将指针从常量更改为非常量。请注意,编译器不喜欢被骗,而且通常是在最不方便的时候(比如在你老板、你老板的老板、你老板的老板的老板面前向重要的潜在客户演示你的程序时),他们可以得到自己的返回).

关于C题: (const void *) vs (void *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547131/

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