0

我有一个清单。列表的每个元素都是一个结构。

struct A
{
   int size;
}

数据如下:

list[0]->size = a number.

如何为列表的每个成员分配一个指针?

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

这是行不通的,因为我只为列表的最后一个元素分配了一个指针。我应该列出指针吗?

这应该可以解决 XY 问题。 如何为列表中的每个元素创建指针?

编辑:列表看起来像这样

A **list;

我想按指针而不是按结构排序,以便更快。

现在试试这个:

A ***p = (A***) malloc(sizeof(A***));

for(i = 0; i < listLength; i++)
    p[i] = &list[i];

for(i = 0; i < listLength; i++)
    printf( p[i]->size); // Error.
4

2 回答 2

1

您可以创建指针数组,例如: struct A *arr_pointer[N]

基本上,你链接结构应该是这样的:

struct A {
    int size;
    struct A *next;
};
于 2013-10-12T02:54:33.147 回答
0
typedef struct {
    int size;
} A, *pA;

typedef struct {
    int size;
} B, *pB;

//and so on...

//Now your list can be a collection of these
typedef struct {
    A a;
    B b;
    //additional members if defined
} LIST;

LIST list[20], *pList;  //[edited to make array of LIST]
//prototype List function

 LIST * updateList(LIST *a); 

int main(void)
{
   pList = &list[0];  //[edit to init pointer to array of lists
   //access and use pointers to list as necessary
   LIST *b = updateList(pList);
   //Use the updated list here
   printf( "b[0].a.size is: %d\n" , b[0].a.size);
   printf( "b[1].a.size is: %d\n" , b[1].a.size);
   printf( "b[2].a.size is: %d\n" , b[2].a.size);
   printf( "b[3].b.size is: %d\n" , b[3].b.size);
   printf( "b[4].b.size is: %d\n" , b[4].b.size);
   printf( "b[5].b.size is: %d\n" , b[5].b.size);

   return 0;
}

LIST * updateList(LIST *a)
{
    //do some manipulations to LIST here...
       a[0].a.size=1;
       a[1].a.size=2;
       a[2].a.size=3;
       //and so on.
       a[3].b.size=4;
       a[4].b.size=5;
       a[5].b.size=6;
       //and so on.
    return a;
}

这对你有用吗?

于 2013-10-12T02:36:06.120 回答