C中结构数组和大小调整的困惑

C中结构数组和大小调整的困惑,c,C,有几个问题我很困惑 创建两个可修改变量的多个结构 如果需要,增加结构的数量 使用传递值将信息存储在两个可修改的变量中 这些值可以在固定时间内访问吗 假设我有这个 void * OPAQUE; typedef struct head Head; typedef struct data Data; struct head { int size; int capacity; Data *info; }; struct data { int key; i

有几个问题我很困惑

  • 创建两个可修改变量的多个结构
  • 如果需要,增加结构的数量
  • 使用传递值将信息存储在两个可修改的变量中
  • 这些值可以在固定时间内访问吗
  • 假设我有这个

     void * OPAQUE;
    
     typedef struct head Head;
     typedef struct data Data;
     struct  head
     {
       int size;
       int capacity;
       Data *info;
     };
     struct data
     {
       int key;
       int values;
     }
    
    使用此函数传入值

     void insert_data(OPAQUE *hOpaque, int key, int data);
     //cast to the known type..
    
    如何在每次迭代中创建多个数据结构。每个结构得到一个新的值输入,所以

    键=52; 数据=43

    这些值将位于第一个对象中。现在。。如果我给出20个键和20个数据呢。然后,我将调整大小以适应更多值的涌入,从而创建更多的结构。我总共有20个建筑

    对于我应该如何处理这个问题以及如何做到这一点有些困惑


    谢谢

    仅举一个例子,您可以像

    Data *new_data = malloc(old_size + 1 * sizeof *new_data);
    if (new_data == NULL)
    {
        // Handle error
    }
    memcpy(new_data, old_data, old_size * sizeof *old_data);
    free(old_data);
    old_data = new_data;
    ++old_size;
    
    或者你也可以

    Data *new_data = realloc(old_data, old_size++ * sizeof *new_data);
    if (new_data == NULL)
    {
        // Handle error
    }
    old_data = new_data;
    
    不算错误检查和处理,语句的数量已经减少了60%


    你决定哪一个更简单。:)

    举个例子,您可以像

    Data *new_data = malloc(old_size + 1 * sizeof *new_data);
    if (new_data == NULL)
    {
        // Handle error
    }
    memcpy(new_data, old_data, old_size * sizeof *old_data);
    free(old_data);
    old_data = new_data;
    ++old_size;
    
    或者你也可以

    Data *new_data = realloc(old_data, old_size++ * sizeof *new_data);
    if (new_data == NULL)
    {
        // Handle error
    }
    old_data = new_data;
    
    不算错误检查和处理,语句的数量已经减少了60%

    你决定哪一个更简单。:)

    可以使用malloc()分配所需的结构:

    Data *info;
    
    可用于malloc()数据类型的结构,因此如果要分配20个数据结构:

    // Inside the function that receives the pointer to Headm assume h
    // be the poiner to the Head structure:
    h -> info = malloc(sizeof(Data) * 20);
    
    或者根据需要动态重新分配结构,如果我们希望增加到21个结构,例如:

    h -> info = realloc(h -> info, (sizeof(Data) * 21));
    
    另一种选择可能是:

     struct  head
     {
       int size;
       int capacity;
       Data info;
     };
    
     struct data
     {
       int key;
       int values;
     }
    
     Head **h = malloc(sizeof(Head *) * 20);
    
    要分配一个数组20头结构指针,因此不需要malloc()数据结构。然后,可以使用每个头部指针分配各个头部结构:

     int s;
     for (s = 0; s < 20; s++) {
         if ((h[s] = malloc(sizeof(Head))) == NULL) {
             perror("malloc()");
             exit(EXIT_FAILURE);
         }
     }
    
    ints;
    对于(s=0;s<20;s++){
    如果((h[s]=malloc(sizeof(Head)))==NULL){
    perror(“malloc()”);
    退出(退出失败);
    }
    }
    
    我想有很多方法可以做到这一点,这取决于你的需要

    希望这有帮助。

    您可以使用malloc()来分配所需的结构:

    Data *info;
    
    可用于malloc()数据类型的结构,因此如果要分配20个数据结构:

    // Inside the function that receives the pointer to Headm assume h
    // be the poiner to the Head structure:
    h -> info = malloc(sizeof(Data) * 20);
    
    或者根据需要动态重新分配结构,如果我们希望增加到21个结构,例如:

    h -> info = realloc(h -> info, (sizeof(Data) * 21));
    
    另一种选择可能是:

     struct  head
     {
       int size;
       int capacity;
       Data info;
     };
    
     struct data
     {
       int key;
       int values;
     }
    
     Head **h = malloc(sizeof(Head *) * 20);
    
    要分配一个数组20头结构指针,因此不需要malloc()数据结构。然后,可以使用每个头部指针分配各个头部结构:

     int s;
     for (s = 0; s < 20; s++) {
         if ((h[s] = malloc(sizeof(Head))) == NULL) {
             perror("malloc()");
             exit(EXIT_FAILURE);
         }
     }
    
    ints;
    对于(s=0;s<20;s++){
    如果((h[s]=malloc(sizeof(Head)))==NULL){
    perror(“malloc()”);
    退出(退出失败);
    }
    }
    
    我想有很多方法可以做到这一点,这取决于你的需要


    希望这能有所帮助。

    您了解动态内存分配吗?即,系统和功能?那你就上路了。接下来你听说过这个功能吗?如果没有,请阅读更多关于它的信息。现在,当你了解这些函数后,开始实验。我应该更具体一些,但我不想使用realloc,我知道如何对变量使用malloc,而不是结构。我确信这是同一个概念,但我无法理解如果你想动态地改变“数组”的大小,那么除了使用
    realloc
    (你可以调用
    malloc
    来分配更多的内存,
    memcpy
    来复制旧数据,然后
    释放
    旧内存,只需一次调用
    realloc
    就简单多了)。为结构分配内存与为任何其他类型分配内存一样:
    data*my_data=malloc(大小*我的数据*需要的结构数量);
    你可以通过创建一个足够大的新结构来改变大小,以指向更多的结构,我只需要通过创建一个临时文件来为更多的结构分配一个新的空间,复制数据然后释放。然后将其设置为temp。我可以用变量来实现这一点。除非结构
    malloc
    free
    malloc
    free
    malloc
    函数只分配一定数量的字节。
    malloc
    函数只需手动执行
    realloc
    在一次调用中所做的操作。
    realloc
    也可能实际扩展或重用内存已经分配的内存跳过了复制,为您节省了宝贵的CPU周期。您知道动态内存分配的相关知识吗?即和函数?然后您就可以开始了。接下来您是否听说过该函数?如果没有阅读更多有关它的信息。现在,当您了解这些函数时,然后开始试验。我应该更具体一些,但我不想使用realloc,我知道如何对变量使用malloc,但不知道如何对结构使用malloc。我确信这是同一个概念,但我无法理解它。如果您希望能够动态更改“数组”的大小,那么除了使用
    realloc
    (你可以调用
    malloc
    来分配更多的内存,
    memcpy
    来复制旧数据,然后
    释放
    旧内存,只需一次调用
    realloc
    就简单多了)。为结构分配内存与为任何其他类型分配内存一样:
    data*my_data=malloc(大小*我的数据*需要的结构数量);
    你可以通过创建一个足够大的新结构来改变大小,以指向更多的结构,我只需要通过创建一个临时文件来为更多的结构分配一个新的空间,复制数据然后释放。然后将其设置为temp。我可以用变量来实现这一点。除非结构
    malloc
    free
    malloc
    free
    。他们不在乎你使用内存做什么,
    malloc
    函数只分配一个特定的numb