* list和** list之间的区别
如果我有一个结构:
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
创建了A *list
(我已经这样做了)。我如何创建5000个指针并使它们指向列表中的元素?
p0 -> list[0] p1 -> list[1] .. .. p[n] -> list[n]
来回几次后,我注意到对于指针的排序有很大帮助。
公平地说,我将上面的编辑作为一个单独的问题发布。
在此声明之后:
A *list = (A*) malloc(sizeOfA * sizeof(A));
list
是一个指向内存块起始位置的指针,该内存块可以sizeOfA
struct A
类型的sizeOfA
元素。 因此, *list
的类型为struct A
,类似地, list[i]
的类型为struct A
,而不是指向struct A
指针(即list+i
)。
如果你想list[i]
是一个指向struct A
的指针,那么你的第二段代码将是正确的,因为你正在分配一个具有足够空间的内存位置来保存sizeOfA
指向struct A
指针。 请注意,您只分配空间来保存指针,而不是实际的struct A
实例。 尝试读取list[i]->c
将导致未定义的行为。
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?
对。