关于C语言的malloc函数的问题。

malloc函数,书上说该函数原型为:void *malloc(unsigned int size);
然而用的时候是例如:pNew=(struct Student *)malloc(sizeof(struct Student));
请问为什么要用括号将*和malloc隔开呢?
为什么不是struct Student *malloc(sizeof(struct Student));

malloc是个宏,用来动态分配内存,内存大小由一个无符号整数指定(内存空间大小是不能有负数的,这个应该好理解吧),此处就是sizeof(struct Student),也就是结构Student的大小,分配完了后返回该空间首地址,但是malloc宏是不能重载的,也就是说它是个通用宏,因此它返回的是void *,也就是虚指针类型(通用指针),而此处是创建一个存放结构的内存,也就是说该指针它是有指定类型的,就是结构Student类型,因此需要强制转换成struct Student *,括号的作用就是告诉编译器进行强制转换为括号中的类型,然后赋值给该类型的指针变量pNew。

而pNew肯定事先在某个地方这样定义
struct Student * pNew;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-28
用括号表示强制转换,你自己也说了,他本来返回的是void,为了赋值给pNew,因为pNew是struct Student*类型,所以强制转换之后才能赋值本回答被提问者采纳
第2个回答  2014-03-28
第一个是强制转换,其实C语言也可以不转。
第二个,struct Student *是定义一个变量或者函数,但是这里是调用的库函数(因为你没有自定义这个函数),返回值应该是void *,所以类型冲突,出错。
相似回答