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