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

时间:2013-12-23 20:08:55

标签: c variables data-structures struct

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

struct myStruct {
char charVar;
int intVar;
};

我会将结构命名为:

struct myStruct name1;
struct myStruct name2;

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

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

感谢。

3 个答案:

答案 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可能有所帮助。我们的想法是,当您要存储新数据时,需要一块内存(使用malloccalloc之类的库调用。您可以通过其地址来引用该内存,即指针

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

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

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