在数组中存储struct和int

时间:2010-11-19 11:22:30

标签: c arrays

我如何在数组中存储结构和内联?

/*a struct to keep block information*/
struct header{
    int freeSpace;
    struct header *nextHead;
    struct header *prevHead;
};

int myinit(int *array, int size){

    array[0] = size;

    /*initial block*/
    struct header root;
    root.freeSpace = size - (sizeof(struct header));

    array[1] = root; /*write the intial block to the array*/

}

4 个答案:

答案 0 :(得分:2)

数组的零元素不会保持其大小。并且您不能同时存储在一个数组内部和结构中。您只能在数组中使用单个对象类型。

要创建动态列表,您应该执行以下操作:

  • 为根元素分配空间(使用malloc,不要重写它,相当不错)

  • 为元素分配空间并将其绑定到根目录,如下所示:

    void constructList() {
      ...
      struct header * pRoot = ...;
      pRoot->previousHead = NULL;
      struct header * pSecond = ...;
      pSecond->previousHead = pRoot;
      pRoot->nextHeader = pSecond;
      ...
    

    }

  • 继续添加元素

  • 完成列表构建

    pLastElement-> nextHeader = NULL;

然后,您将能够通过将nextHeader指针与NULL配合来运行列表检查结束。

答案 1 :(得分:1)

您无法在阵列中存储不同类型的项目。你可以做的是创建一个联合类型来存储你感兴趣的每个类型,并创建一个这种联合类型的数组:

union myData
{
  int ival;
  struct header sval;
  ...
};

union myData myArr[N];
struct header foo;
...
myArr[0].ival = 100;
myArr[1].sval = foo;

但是,我不认为这是您正在寻找的解决方案。这将有助于确切地知道你想要在这里完成什么; 为什么你试图将大小存储在一个数组元素中而将结构存储在另一个数组元素中?

答案 2 :(得分:0)

here看一下这段代码,可能会对你有帮助。

#include<stdlib.h>
#include<stdio.h>

struct list_el {
   int val;
   struct list_el * next;
};

typedef struct list_el item;

void main() {
   item * curr, * head;
   int i;

   head = NULL;

   for(i=1;i<=10;i++) {
      curr = (item *)malloc(sizeof(item));
      curr->val = i;
      curr->next  = head;
      head = curr;
   }

   curr = head;

   while(curr) {
      printf("%d\n", curr->val);
      curr = curr->next ;
   }
}

问候。

答案 3 :(得分:0)

数组只是一块内存。

您可以访问此内存块的特定部分,指定偏移号。因此,如果您想要到达偏移3的数据块,它将使用数组的类型的大小并将其乘以3.

这意味着数组只能包含一种数据类型,否则访问此数组的元素将是一团糟。