C 结构中的箭头与点?

Arrow vs. Dot in C Structs?

我有一个关于 C 中结构的箭头与点表示法的具体问题。我知道 -> 用于结构指针,而 .用于对象,但是我在解析我在网上找到的一些代码时遇到了一些问题。

    typedef struct node{
        int data;
    }Node;

    typedef struct heap{
        int size;
        Node *dataArray;
    }Heap;

    typedef struct plan{
        int maxPile;
        Heap *heapArray;
    }Plan;

鉴于此代码,如果我创建:

    Plan *p

然后我想访问计划内 heapArray 中的特定索引,我会这样做:

    p->heapArray[i]

从这里开始,如果我想访问结构堆中 dataArray 的大小,我会使用“->”还是“.”?

因此,如果我想获取该堆数据数组的第一个元素,我会这样做:

    p->heapArray[i].dataArray[0]

    p->heapArray[i]->dataArray[0]

p->heapArray[i] 属于 Heap 类型,它是一个结构,因此您可以使用 ..

正确答案是

p->heapArray[i].dataArray[0]

因为当你在heapArray指针上使用下标时,就像做指针运算然后解引用指针,像这样

(*(p->heapArray + 1)).dataArray[0]

所以当你取消引用它时,它的类型变成 Heap 这意味着它不是指针并且必须使用 . 而不是 -> 访问。