c - C 结构中的箭头与点?

标签 c struct

我有一个关于 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

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

    p->heapArray[i]

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

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

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

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

最佳答案

正确答案是

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

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

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

因此,当您取消引用它时,它的类型变为 Heap,这意味着它不是指针,必须使用 访问。 而不是 ->

关于c - C 结构中的箭头与点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323386/

相关文章:

c++ - 一个奇怪的 C++ 结构的引用成员

c - 意外的无符号整数行为

java - 为什么int 1的最小值比正值更远离零?

c - 在 C : Why do I have to Specify the Name Twice? 中声明一个结构

c - 不同次数的 printf 调用的不同输出

c - 想要通过遍历结构来减少函数

c++ - 在C中永久存储数组

c - C 中的管道、复制、关闭和执行出现问题

C:链接列表 - 函数 "insert first"未按预期工作

struct - 复合文字中缺少类型