我正在尝试访问结构数组中的项目并按如下方式打印结构字段
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;'
的无效类型参数
这个指针我做错了什么?
答案 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]->field2
和a[i]->field3
更改为a[i].field2
和a[i].field3
。