为列表中的每个元素分配指针

时间:2013-10-19 09:05:37

标签: c pointers struct

这个问题建立在我之前的问题上:Difference Between *list and **list。我决定将它们分成两个问题,使人们回答的问题变得更加混乱,清晰和公平。

我有这段代码:

typedef struct A
{
   char c[100];
}A;

listSize = 5000; 

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

我想调用一个函数并为每个元素创建一个指针。

我如何创建5000个指针并使它们指向列表中的元素?

p0 -> list[0]
p1 -> list[1]
..
..
p[n] -> list[n]

2 个答案:

答案 0 :(得分:4)

A** p = malloc(listSize * sizeof(A*));
int i;
for(i = 0; i < listSize; ++i) {
    p[i] = &list[i];
}

答案 1 :(得分:0)

typedef struct A
{
   char c[100];
}A;

size_t listSize = 5000; // !

A *list = malloc(listSize * sizeof(*list));
if (!list) {
    // complain about low memory and leave this part of function.
}

A** p = malloc(listSize * sizeof(A*));
if (!p) {
    // complain about low memory and leave this part of function.
    // Maybe free(list) in order not to leak memory.
}

只有这样才能安全地写信p

size_t i;
for(i = 0; i < listSize; ++i) {
    p[i] = &list[i];
}