0

如果我有一个结构:

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]

在来回几次之后,我注意到对指针进行排序有很大帮助。

公平地说,我会将上面的编辑作为一个单独的问题发布。

4

2 回答 2

2

在此声明之后:

A *list = (A*) malloc(sizeOfA * sizeof(A));

list是指向可以保存sizeOfA类型元素的内存块的起始位置的指针struct A。因此,*listis 属于 type struct A,类似地,list[i]属于 type struct A,而不是指向struct A(那将是list+i)的指针。

如果您想list[i]成为指向 的指针struct A,那么您的第二段代码将是正确的,因为您分配的内存位置有足够的空间来保存sizeOfA指向 的指针struct A。请注意,您只是分配空间来保存指针,而不是实际struct A实例。尝试读取list[i]->c将导致未定义的行为。

于 2013-10-19T08:34:51.017 回答
0
A *list = (A*) malloc(sizeOfA * sizeof(A));
Is list[i] a pointer to a struct?

否 -list是指向堆中地址的指针,它是具有 size 的内存块的开始sizeOfA * sizeof(A)list[i]是一样的东西*(list + i),这是一个取消引用,会给你一个实际的A.

然而..

A **list = (A**) malloc (sizeOfA * sizeof(A*);
Is list[i] a pointer to a struct?

是的。

于 2013-10-19T08:41:28.070 回答