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

时间:2011-02-13 07:29:11

标签: 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);
         printf("%d", a[i]->field3);

         for(j = 0; j < a[i]->numOfStrings; j++)
         {
             printf("%s", a[i]->strings[j]);
         }
         printf("\n");
    }
}

但是我得到了很多错误

  

' - &gt;'

的无效类型参数

这个指针我做错了什么?

2 个答案:

答案 0 :(得分:41)

a属于Album*类型,这意味着a[i]的类型为Album(它是{{1}数组中的i元素Album)指向的对象。

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

答案 1 :(得分:12)

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

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

要连接到您的问题:将a[i]->field2a[i]->field3更改为a[i].field2a[i].field3