2013-10-19 101 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]; 
} 
相關問題