我在下面两条标记的行上收到“无效类型参数' - >'”的错误 请建议如何纠正
#include<stdio.h>
struct arr{
int distance;
int vertex;
};
struct heap{
struct arr * array;
int count; //# of elements
int capacity;// size of heap
int heapType; // min heap or max heap
};
int main(){
int i;
struct heap * H=(struct heap *)malloc(sizeof(struct heap));
H->array=(struct arr *)malloc(10*sizeof(struct arr));
H->array[0]->distance=20;//error
i=H->array[0]->distance;//error
printf("%d",i);
}
答案 0 :(得分:7)
->
的左参数必须是指针。 H->array[0]
是一个结构,而不是指向结构的指针。因此,您应该使用.
运算符来访问成员:
H->array[0].distance = 20;
i = H->array[0].distance;
或合并它们:
i = H->array[0].distance = 20;
BTW,在C中你应该不投射malloc()
的结果。 malloc()
返回void*
,C会自动将其强制转换为目标类型。如果您忘记#include
malloc()
的声明,则演员将取消您应该收到的警告。在C ++中不是这样,但在C ++中,您通常应该更喜欢new
而不是malloc()
。
答案 1 :(得分:1)
下标隐式取消引用array
成员。如果array
的类型为struct arr *
,则array[0]
的类型为struct arr
(请记住a[i]
等同于*(a + i)
);