2011-09-29 24 views
-3

谁能帮我解释这行做无法理解这样的代码做什么

(UserList *) malloc(sizeof(UserList)); 

我是新的C世界。我的理解是为Userlist类型分配内存。 如果是这样,为什么定义不只是

Userlist malloc(sizeof(UserList)) ? 
+0

我们需要更多的上下文。我想第一行可能是演员。但是你可能会把它分配给某些东西。 – onemasse

+0

争论语法(即,“为什么不是这样,而不是...?”)似乎有点..毫无意义,你不觉得吗?就是这样。 – Blindy

+2

答案:这段代码不会有任何用处。 –

回答

2

这段代码是做是为UserList类型的结构分配动态内存。前面的表达式(UserList*)告诉编译器哪种类型要处理由malloc返回的值。由于malloc在C中是通用的,并且可以返回指向任何类型的指针(有效地使用C术语,void*),所以您可以告诉编译器该指针指向的是什么类型。这通常发生在UserList*类型的变量的初始化的情况下:

UserList* user_list = (UserList *) malloc(sizeof(UserList)); 

注意变量中获得的结果如何是指向正确的类型。您可以使用正常的*user_list语法访问此新分配内存中指针指向的结构。

+0

实际上,你不必告诉编译器什么类型的内存,它实际上是C社区所不喜欢的。 – Blindy

+0

@布林迪:是的,谢谢,正当我重新阅读时纠正了它。 :) –

0

malloc向分配的内存返回一个指针(内存位置)。 *表示“指向”UserList而不是用户列表本身。

我不确定这一行是声明还是声明。如果它是一个语句,那么括号会导致返回的指针类型被转换为“指向UserList的指针”而不是“void *”,这意味着指向任何东西。