2013-10-19 69 views
0

这个问题构建在我之前的问题上: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

OT:'LISTSIZE = 5000;'不会编译。 – alk

+0

假设它是一个int,它应该,不是? –

+0

@MikeJohn,它应该,但'size_t'是更好的选择 –

回答

4
A** p = malloc(listSize * sizeof(A*)); 
int i; 
for(i = 0; i < listSize; ++i) { 
    p[i] = &list[i]; 
} 
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]; 
} 
相关问题