提问人:Mgert33 提问时间:5/2/2022 更新时间:5/2/2022 访问量:402
如何在结构中存储未知大小的值数组
How to store an array of values of unknown size in a struct
问:
我目前有我创建的这个结构,我已经在 main 中初始化了指针。我坚持了解如何向指针添加值然后调整其大小,因为它正在等待用户输入。下面的代码是我在缩短版本中的代码,基本上我想知道如何将 job 的每个值添加到结构中的 jobNum 变量并调整其大小,以便我可以为 jobNum 存储任意数量的值。我对内存分配很陌生。
typedef struct {
int* jobNum;
}JobInfo;
void get_job(JobInfo* jobCalled, int job){
jobCalled->jobNum = job;
}
void main(int argc, char *argv[]){
jobCalled.jobNum = malloc(sizeof(int));
while(1){
//Other Processes
if (USER_INPUT == 'job'){
int job = argv[1];
get_job(&jobCalled, job);
}
}
}
答:
0赞
neutron02
5/2/2022
#1
听起来你很难理解分配。我建议学习链表。基本上简而言之:
typedef struct{
void *head;
void *next;
}myType;
void addElem(myType *ptr){
myType *new = (myType*)malloc(sizeof(myType));
ptr->next = new;
new->next = NULL;
}
这是一种做你所谈论的事情的简单方式,其中头部元素指向你的第一份工作,但我相信它适合你学习选角、分配等。您很可能需要创建一个函数来初始化您的头优先作业。如果您要删除元素,您可能还希望使用 free 从列表中取消分配内存。还值得注意的是,最好有一个单独的类型,该类型将是一个单独的元素,以便您只分配一个头部指针,但如果您在理解概念时遇到困难,这种方式会更容易。
评论
3赞
Yunnosch
5/2/2022
链表是第二步。首先,需要指针、分配甚至变量及其作用域的存在作为基础知识。
0赞
neutron02
5/2/2022
@Yunnosch,我同意,但是,我希望能够看到诸如 malloc 之类的概念(链表等)的实现将形成更好的理解。
1赞
Aconcagua
5/2/2022
无论如何,我宁愿从基于数组的数据结构开始。一般来说,这更有效 - 比较 C++ 中 std::vector 和 std::list 的用法......
上一个:指向数组和变量的 C 指针
评论
int job = argv[1];
是不兼容的赋值,以 。如果你假设参数包含一个整数值,那么你需要先解析 - 如果你也希望有负输入,请参阅strtoul
或有符号的对应部分。char*
int
malloc
jobNum = malloc(sizeof(int) * numberOfElements)
calloc(numberOfElements, sizeof(int))
malloc
realloc