>我通过以下方式声明了一个字符指针:
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));
为什么会这样?我有点困惑
*student[i] = malloc(sizeof(School));
应该student[i] = malloc(sizeof(School));
students
是指向类型 School
的结构的指针数组。因此,您需要为该数组中的每个指针分配。当您编写*student[i]
时 - 您正在取消引用指针i
而不是为其分配内存。
正如尼古拉斯·米亚里(NicolasMiari)指出的那样,sizeof
运营商必须向School
而不是student
申请。
但是,如果我在同一行中分配内存,为什么它会与星星在同一行中分配内存。例如:学生 *姓名 = malloc(sizeof(学生));为什么会这样?我有点困惑
那不一样。当你写Student *name = malloc(sizeof(Student));
时,你既声明了一个指针,又用malloc
初始化它。您可以像这样在一行中执行这两个步骤。或者,您先声明它,然后在另一行中分配malloc
- 在这种情况下,您必须删除星号。
您可能希望参考此问题指针初始化和指针分配。