首页 > 在c語言中用malloc分配內存的問題

在c語言中用malloc分配內存的問題

int *pi = (int*)malloc(sizeof(int));

int *pi = malloc(sizeof(int));

用這兩個語句分配內存,又什麼區別嗎?


malloc的原型返回值是void*,所以int *pi = malloc(sizeof(int)); 在某些编译要求比较严格的编译器中,会报错,因为左值是int*,而右值是void*,类型不一致。所以推荐方法1.

纠正下,在C语言里这么用的确是没问题的,因为c语言对类型的检查不是那么严格,但在强类型语言比如C++里,这样的用法是编译报错的。对于下面同样的代码,用gcc编译会通过,但是g++会错误,考虑到目前很多代码都是C++/C混编的,所以从我个人的角度我建议方式1)

见图:

   
对于std的C,其实标准里也是建议类型转换的,因为你要考虑你的代码不仅仅是跑在最新的c编译器里,也要考虑旧版本的编译器的兼容性。参考见
<The GNU C Library Reference Manual>的手册,如图所示,里面建议最好还是转换下,因为要考虑旧版本的C编译器的支持,当然你如果确保用户不会用旧版本的编译器去编译你代码的话,那无所谓。


强转(int*)才是历史遗留问题。
按照gcc的编程规范,是不建议强转的。malloc出来的 “void*” 本来就是通用类型,可以直接用任意类型的指针接收,而不会有任何的编译警告。
之所以大家强转,是不标准的c编译器(如vc)的写法。


第一个返回类型强制装换为int指针.历史问题malloc返回的是void类型的指针


没有区别,c语言可以隐式转换(仅限c语言

【热门文章】
【热门文章】