以下代码在 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/