Недопустимый аргумент типа -> C структурирует - PullRequest
26 голосов
/ 13 февраля 2011

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

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 ]

43 голосов
/ 13 февраля 2011

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

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

12 голосов
/ 13 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...