C与C++中的指针

Abh*_*ain 4 c c++ pointers

可能重复:
为什么C++需要为malloc()进行强制转换,但C不需要?

这段特殊的代码在C中运行良好,但在编译为C++程序时会出现编译错误.

#include<stdio.h>
#include<stdlib.h>
int main(){
    int (*b)[10];
    b = calloc(20, sizeof(int));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++编译中的错误是:

test.cpp: In function ‘int main()’:
test.cpp:9:28: error: invalid conversion from ‘void*’ to ‘int (*)[10]’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

任何想法可能是什么原因?

MBy*_*ByD 6

在C语言中,您可以隐式地从/向其他指针类型的void指针强制转换,但在c ++中不允许它,并且您需要显式地强制转换它:

b = (int (*)[10])calloc(20, sizeof(int));
Run Code Online (Sandbox Code Playgroud)