Подтвердить что ты не робот

Недопустимый аргумент типа → C structs

Я пытаюсь получить доступ к элементам в массиве структур и печатать поля структур следующим образом

printList(Album *a, int numOfStructs)
{
    int i;
    int j;

    for(i = 0; i < numOfStructs; i++)
    {
         printf("number%d\n:", i+1);
         printf("%s", a[i]->field2);
         printf("%s", a[i]->field2);
         printf("%d", a[i]->field3);

         for(j = 0; j < a[i]->numOfStrings; j++)
         {
             printf("%s", a[i]->strings[j]);
         }
         printf("\n");
    }
}

но я получаю множество ошибок как таковых

неверный аргумент типа '- > '

Что я делаю неправильно с этим указателем?

4b9b3361

Ответ 1

a имеет тип Album*, что означает, что a[i] имеет тип Album (это i -й элемент в массиве объекта Album, на который указывает a).

Левый операнд -> должен быть указателем; оператор . используется, если он не является указателем.

Ответ 2

Вам нужно использовать оператор .. Видите ли, когда вы применяете * к указателю, вы разыгрываете его. То же самое происходит с []. Разница между * и [] заключается в том, что скобки требуют смещения от указателя, который добавляется к адресу в указателе, прежде чем он будет разыменован. В принципе, эти выражения идентичны:

*ptr == ptr[0]
*(ptr + 1) == ptr[1]
*(ptr + 2) == ptr[2]

Чтобы подключиться к вашему вопросу: измените a[i]->field2 и a[i]->field3 на a[i].field2 и a[i].field3.