C++ C与C+中的指针+;
可能重复:C++ C与C+中的指针+;,c++,c,pointers,C++,C,Pointers,可能重复: 这个特定的代码在C中运行良好,但编译为C++程序时编译错误。 #include<stdio.h> #include<stdlib.h> int main(){ int (*b)[10]; b = calloc(20, sizeof(int)); return 0; } 任何可能是什么原因?< P>虽然在C++中你可以隐式地从指针到空指针到其他指针类型,但是C++中是不允许的,你需要显式地投下: b = (int (*)[10])ca
<>这个特定的代码在C中运行良好,但编译为C++程序时编译错误。
#include<stdio.h>
#include<stdlib.h>
int main(){
int (*b)[10];
b = calloc(20, sizeof(int));
return 0;
}
任何可能是什么原因?
< P>虽然在C++中你可以隐式地从指针到空指针到其他指针类型,但是C++中是不允许的,你需要显式地投下:b = (int (*)[10])calloc(20, sizeof(int));
C在铸造时更为宽松,C++要求在铸造时显式。您也应该在C版本中强制转换它。
C++
是比C
更严格的类型检查语言。
因此,您需要手动对其进行类型转换,但在C中,它是自动进行类型转换的
这里calloc返回void*
,而b
的类型为int(*)[]
,因此类型转换是必需的
在C++中,其他类型的软件也可用,你需要记住
<static_cast>
<const_cast>
<reinterpret_cast>
<dynamic_cast>
更多信息请参见此
你能指定使用哪种C和C++编译器吗?实际上,在C中,一般认为它是一个坏主意,因为它是冗长的并且可以隐藏错误。看见
<static_cast>
<const_cast>
<reinterpret_cast>
<dynamic_cast>