2011-03-11 119 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