use*_*840 0 c pointers casting
我无法理解为什么以下几行在gcc中给出了"从不兼容的指针类型初始化":
int num = 10;
int *p = (char *) #
Run Code Online (Sandbox Code Playgroud)
为什么编译器不清楚我想要这个(当我这样做时,警告消息消失):
int num = 10;
int *p = (int *) (char *) &num ;
Run Code Online (Sandbox Code Playgroud)
如果以下情况可以:
char eu = (short) 10;
Run Code Online (Sandbox Code Playgroud)
我们不需要这样做:
char eu = (char) (short) 10;
Run Code Online (Sandbox Code Playgroud)
那为什么我们需要在指针定义中显式添加基类型?
嗯,它只是定义语言的方式:不同类型的对象指针不能在彼此之间隐式转换.你需要明确的演员.
在大多数情况下,取消引用错误类型的指针是未定义的行为,所以要求你明确这种类型的转换是一个非常合理的预防措施.
这是一个好的设计的标志,简单的事情很简单(例如int * p = #),而狡猾的事情是冗长的,所以很明显你做了一些奇怪的事情.
(请注意,在C(而不是C++),你可以通过隐式转换无效指针:int * p = (void *)#)