【问题标题】:C: Creating a collection of structures/ creating an list of integersC:创建结构集合/创建整数列表
【发布时间】:2011-03-11 22:55:38
【问题描述】:

我想知道你是否可以创建一个整数列表。

正如您了解大多数其他语言一样,您可以拥有无​​限的数字列表。 但我不知道你是否可以用 C 来做到这一点。

在 C 中你可以做到

int 整数[20]; 但我不想为它声明一个大小,而是我想要一个永远持续下去的列表。

此外,我还有一个结构

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

为了列出我们刚刚做的结构 STRUCT_REC 列表;对吧?

【问题讨论】:

    标签: c list


    【解决方案1】:

    你有两个选择:

    1. 使用动态分配的数组。您可以使用malloc() 分配所需的空间量。然后,您可以使用realloc() 分配更多空间。这种方法的缺点是您通常会分配比您需要的更多空间,并且当您重新分配空间时,程序可能必须将所有项目移动到内存中的新位置,这可能会很昂贵。

    2. 使用linked list。链接列表允许您随时为单个项目动态分配空间并将其添加到列表末尾。为此,链表由节点组成,每个节点保存一项数据和一个指向下一个节点的指针。这种方法的缺点是您会丢失快速随机访问(即,如果您想要第 100 项,则必须先查看第 1-99 项),并且您会因额外的指针而产生额外的空间开销。

      李>

    【讨论】:

      【解决方案2】:

      http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

      您可以使用 realloc 来增加分配的内存量。此外,该页面上的示例可能是您想要学习的内容。它接近您正在寻找的东西。

      【讨论】:

        【解决方案3】:

        你需要看看malloc和朋友(callocreallocfree)。

        无论你用什么类型,使用方式都是一样的。

        这是一个非常简单的双打示例:

        #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;
        }
        

        【讨论】:

        • 在添加示例代码之前被否决了......所以原因不是为了做 OP 作业哈哈
        • @Chris:谢谢。我还想知道为什么帖子被否决,并希望能学到一些东西,或者至少,学习如何制作更好的帖子。
        【解决方案4】:

        您需要列表还是需要为列表编写代码?如果是前者,我建议您不要重新发明轮子,而是使用现有的经过测试的库,例如 glib

        【讨论】:

          【解决方案5】:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            • 1970-01-01
            • 2015-02-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多