* list和** list之间的区别

时间:2013-10-19 08:30:18

标签: c pointers struct

如果我有结构:

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]

来回几次后,我注意到排序指针有很多帮助。

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

2 个答案:

答案 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?

烨。