' - >'的无效类型参数

时间:2013-09-17 21:21:36

标签: c pointers structure

我在下面两条标记的行上收到“无效类型参数' - >'”的错误 请建议如何纠正

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

2 个答案:

答案 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));