无效的类型参数->;C结构

无效的类型参数->;C结构,c,pointers,C,Pointers,我试图访问结构数组中的项,并按如下方式打印结构字段 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

我试图访问结构数组中的项,并按如下方式打印结构字段

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");
    }
}
printList(相册*a,int numOfStructs)
{
int i;
int j;
对于(i=0;ifield2);
printf(“%s”,a[i]->field2);
printf(“%d”,a[i]->field3);
对于(j=0;jnumOfStrings;j++)
{
printf(“%s”,a[i]>strings[j]);
}
printf(“\n”);
}
}
但我也有很多错误

“->”的类型参数无效


这个指针有什么问题吗?

a
Album*
类型,这意味着
a[I]
Album
类型(它是
a
指向的
Album
对象数组中的
I
第个元素)


->
的左操作数必须是指针;如果不是指针,则使用
运算符。

您需要使用
运算符。您可以看到,当您将
*
应用于指针时,您正在取消对它的引用。这同样适用于
[]
*
[]
之间的区别在于,括号要求与指针的偏移量,该偏移量在取消引用指针之前添加到指针中的地址。基本上,这些表达式是相同的:

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

连接到您的问题:将
a[i]->field2
a[i]->field3
更改为
a[i]。field2
a[i]。field3

谢谢。我的程序的不同部分需要->和其他部分需要?我刚从C开始,当我认为我理解指针时,我意识到我没有任何线索(当我尝试以下fgets(&(tempAlbum->field1)、MAXCHARACTERS、stdin)时;我得到警告:从不兼容的指针类型传递'fgets'的参数1