Недопустимый аргумент типа '->' (динамически размещенный вектор структур) в C - PullRequest
0 голосов
/ 06 ноября 2018

Мне известно об использовании vector[i].member при доступе к члену локальной структуры vector. Но сейчас я изучаю динамическое размещение, и, насколько я читал, мне нужно использовать -> для доступа к члену, когда структура 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");
    }
}   

Компилятор говорит

ошибка: неверный аргумент типа '->' (есть 'Person')

Однако, когда я использую list[i].member вместо list[i]->member, программа работает отлично. Я запутался, нужно ли мне использовать ->. Я хотел, чтобы вектор структуры не использовал стековую память, а вместо этого кучу.

1 Ответ

0 голосов
/ 06 ноября 2018

Чтобы получить прямой доступ к члену структуры, вам нужно использовать .. Чтобы получить доступ с указателем, вам нужно использовать ->. В вашем коде list - это указатель на структуру, а list[i] - это структура. Вот почему вы не можете получить доступ через ->.

...