2011-03-11 64 views
0

我想知道您是否可以創建一個整數列表。C:創建一個結構集合/創建一個整數列表

正如您所瞭解的大多數其他語言一樣,您可以擁有無​​限數量的列表。 但我不知道你是否能做到這一點與C.

用C你可以做

INT整數[20]; 但我不想爲它聲明一個大小,而是我想要一個永遠持續下去的列表。

,另外,我有一個結構

typedef struct someStruct 
{ 
    char data; 
    chat data2; 
}STRUCT_REC,*SR; 

爲了使結構的列表,我們只是做 STRUCT_REC列表;對?

回答

2

你有兩個選擇:

  1. 使用動態分配的數組。您使用malloc()分配您需要的空間量。然後您可以使用realloc()分配更多空間。這種方法的缺點是你一般會分配比你需要的更多的空間,當你重新分配空間時,程序可能不得不將所有的項目移動到內存中的新位置,這可能是昂貴的。使用linked list。鏈接列表允許您隨時爲單個項目動態分配空間並將其添加到列表的末尾。爲此,鏈表由節點組成,每個節點保存一個數據項和一個指向下一個節點的指針。這種方法的缺點是你失去了快速的隨機訪問(即如果你想要項目#100,你必須首先看1-99項目),並且額外的指針有額外的空間開銷。

0

您需要查看malloc和朋友(calloc,realloc, free)。

無論你使用什麼類型,使用它的方式都是一樣的。

這裏有一個很簡單的例子與雙打:

#include <stdlib.h> 
int main(void) { 
    double *arr; 
    arr = malloc(1 * sizeof *arr); /* size for 1 element */ 
    if (arr) { 
     double *tmp; 
     tmp = realloc(arr, 100 * sizeof *tmp); /* attempt to resize for 100 elements */ 
     if (tmp) { 
      arr = tmp; /* resize 'worked' */ 
     } else { 
      /* not enough memory */ 
      free(arr); 
      exit(EXIT_FAILURE); 
     } 
     /* use arr */ 
     free(arr); 
    } 
    return 0; 
} 
+0

我真的很好奇,爲什麼這是downvoted。 – 2011-03-11 23:36:44

+0

在示例代碼被添加到...之前,它被降級了,所以原因不是做OP作業LOL – pmg 2011-03-11 23:41:14

+0

不錯。考慮倒退避免。 – 2011-03-11 23:43:28

0

您是否需要列表,或者需要編寫列表的代碼?如果前者,我建議你不要重新發明輪子,而應使用現有的測試庫,如glib