Недопустимый аргумент типа -> C структурирует

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

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");
    }
}

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

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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам