我想创建一个包含2个变量的结构,例如
struct myStruct {
char charVar;
int intVar;
};
我会将结构命名为:
struct myStruct name1;
struct myStruct name2;
等
问题是,我不知道将输入多少变量,因此必须有无限的nameX结构。
那么,我如何用变量命名这些结构?
感谢。
答案 0 :(得分:4)
您应该使用数组和指针。
struct myStruct *p = NULL;
p = malloc(N * sizeof *p); // where N is the number of entries.
int index = 1; /* or any other number - from 0 to N-1*/
p[index].member = x;
如果您需要添加其他条目,可以使用realloc
向其中添加元素。
答案 1 :(得分:2)
重新定义myStruct
struct myStruct {
char charVar;
int intVar;
struct myStruct *next;
};
跟踪您拥有的最后一个结构以及列表的开头。添加新元素时,请将它们附加到链接列表的末尾。
/* To initialize the list */
struct myStruct *start, *end;
start = malloc(sizeof(struct myStruct));
start->next = NULL;
end = start;
/* To add a new structure at the end */
end->next = malloc(sizeof(struct myStruct));
end = end->next;
end->next = NULL;
此示例不执行任何错误检查。以下是如何沿着列表单步打印其中的所有值:
struct myStruct *ptr;
for(ptr = start; ptr != NULL; ptr = ptr->next)
printf("%d %s\n", ptr->intVar, ptr->charVar);
通常,链接列表(或任何其他类型的列表)中的每个结构都不必具有不同的名称。您可以在使用时将任何未命名的结构分配给指针ptr
。
答案 2 :(得分:1)
那么,我如何用变量命名这些结构?
我认为每个初学者都会想要命名一切。这并不奇怪 - 您学习使用变量来存储数据,因此您总是使用变量似乎很自然。但答案是,不总是使用变量来存储数据。通常,您将数据存储在动态创建的结构或对象中。阅读dynamic allocation可能有所帮助。我们的想法是,当您要存储新数据时,需要一块内存(使用malloc
或calloc
之类的库调用。您可以通过其地址来引用该内存,即指针。
有许多方法可以跟踪您获得的所有内存,每个内存构成data structure。例如,您可以将大量数据保存在连续的内存块中 - 这是一个数组。有关示例,请参阅Devolus的答案。或者你可以拥有许多小块内存,每个内存包含下一个的地址(同样是一个指针);这是一个链表。疯狂物理学家的回答是链表的一个很好的例子。
每个数据结构都有其自身的优点和缺点 - 例如,数组允许快速访问但插入和删除速度慢,而链接列表访问速度相对较慢,但插入和删除速度很快。为手头的工作选择正确的数据结构是编程的重要部分。
通常需要一点时间才能熟悉指针,但是值得付出努力,因为它们为程序中的数据存储和操作提供了很多可能性。享受骑行。