这个问题建立在我之前的问题上: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]
答案 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];
}