2010-11-19 92 views
0

我将如何去存储结构和int整数?在一个数组中存储一个结构和整数

/*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*/ 

} 

回答

2

数组的零元素不保留它的大小。而且你不能同时存储一个数组和整数。你只能在数组中使用单个对象类型。

创建动态列表,你应该做到以下几点:

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

  • 分配空间的元素,它结合到根这样的:

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

    }

  • 保持添加元素

  • 面漆施工列表由

    pLastElement-> nextHeader = NULL;

然后,你将能够通过列表检查它的结束,通过将nextHeader指针与NULL进行联合映射。

+0

阅读你所说的我想创建一个动态列表,而不是使用数组,任何建议我应该从我已经发布的地方去? – Alex 2010-11-19 11:29:13

+0

ps:我正在重写malloc,所以我需要存储在数组[0]中的大小 – Alex 2010-11-19 11:31:02

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 ; 
    } 
} 

关于。

0

数组只是一块内存。

您可以访问此内存块的指定偏移号的特定部分。因此,如果你想达到数据块的偏移量3它将使用该阵列的类型的大小和由3.

这意味着阵列只能包含一个数据类型相乘,以其他方式访问的元素这个数组将是一团糟。

1

您不能在数组中存储不同类型的项目。你可以是创建一个存储每个你感兴趣的类型的联合类型,并创建联合类型的数组:

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

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

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

相关问题