C中的指针到const转换

Fre*_*red 4 c const

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

const void * x = 0;
char * const * p = x;
Run Code Online (Sandbox Code Playgroud)

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

同样,这是C,而不是C++.谢谢.

Igo*_*Oks 5

之所以发生这种情况,是因为当你将一种类型的指针指向另一种类型时,有时会无意中完成(bug),因此编译器会向你发出警告.

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

        const void * x = 0;
        char * const * p = (char * const * )x;
Run Code Online (Sandbox Code Playgroud)

PS在我写的第一个地方" 大部分时间都是无意中完成的",但当他理所当然地说无效*专门用于此目的时,AndreyT让我重新考虑它.