我已按以下方式声明了一个char指针:
School *student[10];
for(i=0;i<10;i++){
*student[i] = malloc(sizeof(Student)); <--- Error points here
}
我得到的错误是:
incompatible types when assigning to type 'struct Student' from type 'void*'
有谁知道我收到此错误的原因?
但是,如果我要在与星形相同的线路上分配内存,怎么办呢?例如:Student *name = malloc(sizeof(Student));
为什么这样做?我有点困惑
答案 0 :(得分:3)
*student[i] = malloc(sizeof(School));
应为student[i] = malloc(sizeof(School));
students
是指向School
类型结构的指针数组。所以你需要为该数组中的每个指针分配。当您编写*student[i]
时 - 您正在取消引用指针i
而不是为其分配内存。
正如NicolasMiari指出的那样,sizeof
运算符必须适用于School
而不是student
。
但是,如果我要在与星形相同的线路上分配内存,怎么办呢?例如:Student * name = malloc(sizeof(Student));为什么这样做?我有点困惑
那是不同的。当您编写Student *name = malloc(sizeof(Student));
时,您正在声明指针并使用malloc
初始化。您可以像这样在一行中执行这两个步骤。或者,您首先声明它,然后将{/ 1>}分配在另一行 - 在这种情况下,您必须删除星号。