Недопустимый аргумент типа → 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");
}
}
но я получаю множество ошибок как таковых
неверный аргумент типа '- > '
Что я делаю неправильно с этим указателем?
Ответы
Ответ 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
.