c - C 中指针到常量的转换

标签 c constants

以下代码在 GCC 上编译时没有警告,但在 Visual Studio 2005 中给出警告。

const void * x = 0;
char * const * p = x;

x指向一个未知类型的常量对象,p指向一个指向char的常量指针。为什么对 p 的赋值会导致警告?

同样,这是 C,不是 C++。谢谢。

最佳答案

发生这种情况是因为当您将一种类型的指针指向另一种类型时,有时它是无意中完成的(错误),因此编译器会警告您。

因此,为了告诉编译器您确实打算这样做,您必须进行显式转换,如下所示:

        const void * x = 0;
        char * const * p = (char * const * )x;

附言一开始我写了“大多数时候是无意中完成的”,但 AndreyT 正确地说 void * 专门为此目的而存在,这让我重新考虑了这一点。

关于c - C 中指针到常量的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624371/

相关文章:

c - 事实与枚举

组合 system() 和 popen()?

使用 SDL_Rect 创建多个矩形

c - 解释 "About size_t and ptrdiff_t"中的这段话

java - 会记住它的值的计数器

c++ - 公开 begin() 和 end() 的 const 和非常量版本,以使用智能指针迭代成员 vector

c - getopt switch 语句永远不会达到默认情况

c - Linux 中的 PATH_MAX 定义在哪里?

java - 不让我初始化一个最终常量 int 吗?

ios - 如何在 Objective-C 的框架中设置常量文件