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
这意味着它不是指针并且必须使用 .
而不是 ->
访问。
我有一个关于 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
这意味着它不是指针并且必须使用 .
而不是 ->
访问。