* 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? 

对。