每个链接列表都有较小的数组,在C中有意义吗?

时间:2016-01-12 14:41:57

标签: c arrays list hyperlink

我想创建一个程序来创建包含数组的链接列表。 但是,我希望每个链接都有一个比前一个更小的数组。此时程序可以运行,但我想知道程序是否实际上是在创建更小的数组,因此不会浪费任何可用空间。

int main()

{
    int c=3;
    int d=0;

    typedef struct mylist {
        struct mylist *link;
        int info[c-d];
    }Node;

    Node *a = (Node*) malloc (sizeof (Node));
    a -> link = NULL;
    Node *b = a;
    int i=0,j=0;

    while (i!=4){
        while ((j)<=(2-d)){
            printf("link%d array%d  ",i,j);
            scanf("%d",&a->info[j]);
            j++;
        }
        j=0;
        if (i !=3 ){
            a -> link = (Node*) malloc (sizeof (Node));
            a = a -> link;
        }
        d++;
        i++;
    }
    d=0;
    a = b;
    while (a != NULL){
        while ((j)<=(2-d)){
            printf("%d ->", a->info[j]);
            j++;
        }
        j=0;
        d++;
        a = a -> link;
    }
    a=b;

    printf(" the end");

    return 0;
}

1 个答案:

答案 0 :(得分:0)

首先,你不是free()你分配的记忆,确保你照顾它。

现在,你在问你是否没有使用任何额外的内存 - 阅读你的代码对我们来说非常困难,正如你在评论中看到的那样。自己尝试一下总是一个好主意 - 找出结构初始化期间占用的内存大小,或者使用sizeof()运算符,或者检查你的值。

但是,由于您静态初始化数组大小,我认为您的代码无法正常运行。由于值是在编译时确定的,因此完全没问题。但是,问题是您已经在开始时确定了int数组的大小。

如果要使用动态内存分配,则需要使用malloc()功能。创建新节点时,您还必须为其中的数组分配内存(并计算要为其提供的大小)。这也将解决你不知道数组大小或不确定它的问题 - 因为你明确地声明了为数组分配了多少内存。

虽然只是一小部分。在分配例如20字节的内存时,操作系统不会特别为您提供20个字节 - 您将获得整个页面,这通常会占用更多内存。因此,除非您正在使用正确控制内存非常重要的设备,或者您正在使用大容量内存,否则您不需要过度考虑4个整数和3个整数的数组大小的差异。