使用C中的另一个变量命名变量

我想创建一个包含2个变量的结构,例如

struct myStruct { char charVar; int intVar; }; 

我将这些结构命名为:

 struct myStruct name1; struct myStruct name2; 

等等

问题是,我不知道将输入多少变量,因此必须有无限的nameX结构。

那么,我如何用变量命名这些结构呢?

谢谢。

你应该使用数组和指针。

 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为其添加元素。

重新定义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

那么,我如何用变量命名这些结构呢?

我想每个初学者都想开始想要命名一切。 这并不奇怪 – 你学会了使用变量来存储数据,所以你总是使用变量似乎很自然。 但答案是,您并不总是使用变量来存储数据。 通常,您将数据存储在动态创建的结构或对象中。 阅读动态分配可能会有所帮助。 这个想法是,当你有一个新的数据要存储时,你需要一块内存(使用像malloccalloc这样的库调用)。 您通过其地址(即指针)来引用该段内存。

有许多方法可以跟踪您获得的所有内存,每个内存构成一个数据结构 。 例如,您可以将大量数据保存在连续的内存块中 – 这是一个数组。 有关示例,请参阅Devolus的答案。 或者你可以有很多小内存,每个内存包含下一个的地址(同样是一个指针); 这是一个链表。 Mad Physicist的回答是链表的一个很好的例子。

每种数据结构都有自己的优点和缺点 – 例如,数组允许快速访问但插入和删除速度慢,而链接列表访问速度相对较慢,但插入和删除速度很快。 为手头的工作选择正确的数据结构是编程的重要部分。

通常需要一点时间来熟悉指针,但是值得付出努力,因为它们为程序中的数据存储和操作提供了很多可能性。 享受车程。