0

这个问题建立在我之前的问题之上:*list 和 **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]
4

2 回答 2

4
A** p = malloc(listSize * sizeof(A*));
int i;
for(i = 0; i < listSize; ++i) {
    p[i] = &list[i];
}
于 2013-10-19T09:08:31.717 回答
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];
}
于 2013-10-19T10:10:30.620 回答