如果我有结构:
typedef struct A
{
char c[100];
}A;
然后我创建了一个
sizeOfA = 5000;
A *list = (A*) malloc(sizeOfA * sizeof(A));
list[i]
是指向结构的指针吗?
或者,如果我想要一个指向结构的指针,我应该
A **list = (A**) malloc (sizeOfA * sizeof(A*);
[编辑]
现在让我说我使用 A *list
创建了列表(我已经这样做了)。如何创建5000个指针并使它们指向列表中的元素?
p0 -> list[0]
p1 -> list[1]
..
..
p[n] -> list[n]
来回几次后,我注意到排序指针有很多帮助。 击>
公平地说,我会将上面的编辑作为一个单独的问题发布。
答案 0 :(得分:2)
在此声明之后:
A *list = (A*) malloc(sizeOfA * sizeof(A));
list
是指向可以保存sizeOfA
类型struct A
元素的内存块起始位置的指针。因此,*list
的类型为struct A
,类似地,list[i]
的类型为struct A
,而不是指向struct A
的指针(list+i
)。
如果你希望list[i]
成为struct A
的指针,那么你的第二段代码就是正确的,因为你正在分配一个有足够空间的内存位置来保存{{1}指向sizeOfA
的指针。请注意,您只是分配空间来保存指针,而不是实际的struct A
实例。尝试阅读struct A
将导致未定义的行为。
答案 1 :(得分:0)
A *list = (A*) malloc(sizeOfA * sizeof(A));
Is list[i] a pointer to a struct?
否 - list
是指向堆中地址的指针,该地址是大小为sizeOfA * sizeof(A)
的内存块的开头。 list[i]
与*(list + i)
相同,这是一个可以为您提供实际A
的解除引用。
然而..
A **list = (A**) malloc (sizeOfA * sizeof(A*);
Is list[i] a pointer to a struct?
烨。