Недопустимый аргумент типа -> 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
,