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

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

最佳答案

首先,您没有free()您分配的内存,请务必注意这一点。

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

但是,我认为您的代码无法正常工作,因为您正在静态初始化数组大小。由于这些值是在编译时确定的,因此完全没问题。然而,问题是你一开始就已经决定了int数组的大小。

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

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

关于c - 每个链接列表都有较小的数组,这在 C 中有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746598/

相关文章:

c - 如何删除一个数组结构体,并且最后一个索引不能被其他索引替换?

arrays - 如何在 swift 中为 UIPickerview 添加一个新元素到一个 2 组件数组

Python - "in"语句搜索对象列表缓慢

html - 创建一个两列的无序列表

C 字符串格式化

arrays - 获取数组的中位数

将结构数组复制到共享内存中

python - 比较字符串列表中各自元素的后缀

c - 数组索引增量的段错误?

c - 头文件结构中的链接器错误