Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C与C+中的指针+;_C++_C_Pointers - Fatal编程技术网

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>