【问题标题】:Invalid type argument of -> C structs-> C 结构的类型参数无效
【发布时间】:2011-02-13 07:29:10
【问题描述】:

我正在尝试访问结构数组中的项目并按如下方式打印结构字段

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");
    }
}

但是我得到了很多这样的错误

'->' 的类型参数无效

这个指针我做错了什么?

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    aAlbum* 类型,这意味着 a[i]Album 类型(它是 a 指向的 Album 对象数组中的 ith 元素)。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢。我程序的不同部分需要 -> 其他部分需要 . ?我刚从 C 开始,一旦我认为我理解了指针,我就意识到我一无所知。 :( 当我尝试以下 fgets(&(tempAlbum->field1),MAXCHARACTERS, stdin); 我收到警告:从不兼容的指针类型传递 'fgets' 的参数 1
      猜你喜欢
      • 2021-12-23
      • 2019-09-07
      • 1970-01-01
      • 2011-12-03
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      相关资源
      最近更新 更多