【发布时间】:2023-04-01 12:39:01
【问题描述】:
我对几个问题感到非常困惑。
- 创建包含两个可修改变量的多个结构
- 如果需要,增加结构的数量
- 使用按值传递将信息存储在两个可修改变量中。
- 可以在恒定时间内访问这些值吗?
所以假设我有这个..
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 个结构。
对我应该如何处理以及如何完成有点困惑。
谢谢
【问题讨论】:
-
我应该更具体一些,但我不想使用 realloc 并且我知道如何将 malloc 用于变量而不是结构。我确定这是同一个概念,但我无法掌握它
-
如果你希望能够动态改变一个“数组”的大小,那么你别无选择,只能使用
realloc(好吧,你可以调用malloc来分配更多的内存,memcpy复制旧数据,然后free旧内存,只需调用realloc就容易多了)。为结构分配内存与为任何其他类型分配内存相同:Data *my_data = malloc(sizeof *my_data * NUMBER_OF_STRUCTURES_NEEDED); -
您可以通过创建一个足够大以指向更多结构的新结构来更改大小,我只需要通过创建一个临时空间来为更多结构分配一个新空间,然后复制数据然后释放。然后将其设置为等于温度。我可以用变量来做到这一点。除非这对于结构是不可能的
-
malloc和free是malloc和free。他们不在乎您将内存用于什么,malloc函数只是分配一定数量的字节。手动完成所有您想做的事情正是realloc所做的在一次调用中。此外,realloc也有可能实际上扩展或重用已分配的内存以跳过复制,从而节省宝贵的 CPU 周期。
标签: c