C中“->”(结构的动态分配向量)的无效类型参数

时间:2018-11-06 18:17:48

标签: c struct malloc typedef

我知道在访问本地结构向量成员时使用public class CustomValidator : AbstractValidator<Customer> { public CustomValidator() { RuleFor(obj => obj.Prop).NotNull().Level(ErrorLevels.Error); RuleFor(obj => obj.Prop).NotEqual("foo").Level(ErrorLevels.Warning); } } 。但是我现在正在研究动态分配,据我所读,当结构vector[i].member是动态的时,我需要使用->访问成员。

vector

编译器说

  

错误:“->”(类型为“人”)的类型参数无效

但是,当我使用#include<stdio.h> #include<stdlib.h> //Struct that stores a person's number and first name. typedef struct person{ int number; char* first_name; } Person; int main(){ int List_size; //Stores the size of the list. scanf("%d", &List_size); Person* list= (Person*) malloc(List_size * sizeof(Person)); //Allocate a vector of persons struct in a variable list. for(int i = 0; i < List_size; i++){ //Fills each person of list scanf("%d", &(list[i]->number)); (list[i]->first_name) = (char*) malloc(100 * sizeof(char)); scanf("%s",(list[i]->first_name)); } for(int i = 0; i < List_size; i++){ //Prints each person of list printf("%d is list[%d].number, and ", (list[i]->number), i); printf("%s is list[%d].name\n", (list[i]->first_name), i); printf("---------------\n"); } } 而不是list[i].member时,该程序运行良好。我很困惑是否需要使用list[i]->member。我希望结构向量不使用堆栈内存,而是使用堆。

1 个答案:

答案 0 :(得分:2)

要直接访问struct的成员,您需要使用.。要使用指针进行访问,您需要使用->。在您的代码中,list是结构指针,而list[i]是结构指针。这就是为什么您无法通过->访问的原因。