2010-11-19 89 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; 

不過,我不認爲這是解決方案,您正在找。這將有助於確切知道你在這裏想要完成什麼; 爲什麼你想要在一個數組元素和另一個結構中存儲大小?

相關問題