读书人

开辟空间为什么前面要强制转换一下?解

发布时间: 2012-05-01 12:48:58 作者: rapoo

开辟空间为什么前面要强制转换一下?
char *p;
p=(char *)malloc(5*sizeof(char));
为什么不能将第二句写成:p=malloc(5*sizeof(char));

[解决办法]
char *p;
p=malloc(5*sizeof(char));//这样是通不过编译的,至少vc是通不过的...


error C2440: “=”: 无法从“void *”转换为“char *”
1> 从“void*”到指向非“void”的指针的转换要求显式类型转换
[解决办法]
原型:extern void *malloc(unsigned int num_bytes);

[解决办法]
C里面这样写没问题,C++不行,malloc返回是void*的指针
[解决办法]
因为c++中void*无法直接转换到其它 type*.
c中可以。
于是,c++发明了new,来代替malloc之类的。这样,也不用转换了。。

读书人网 >C语言

热点推荐