2013-12-23 59 views
2

我想创建与2个变量的结构体的另一变量,如命名的变量在C

struct myStruct { 
char charVar; 
int intVar; 
}; 

,我将命名结构为:

struct myStruct name1; 
struct myStruct name2; 

问题是,我不知道会输入多少个变量,所以必须有无限的nameX结构。

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

谢谢。

+11

查找*数组*。 – Blorgbeard

+3

我想让你的机器拥有无限的内存。 – 2013-12-23 20:11:24

+0

大声笑我的意思是我不知道会输入多少个变量,我不想在开始时创建这些变量。我想在用户需要时创建一个结构,但我不知道如何命名它们 – user3108849

回答

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如果你需要添加额外的条目元素添加到它。

+0

我得到错误“p'的冲突类型”...你是什么意思与“索引”? – user3108849

+0

@Devolus。就我个人而言,我会回答你的答案,因为这是一个更好的整体概念。我不是支离破碎的链表的忠实拥趸,尽管它们有其用途。随着内存运行到GB中,预分配通常更容易。 –

+0

如果你需要更多的条目,你总是可以'realloc()'。 – Arkadiy

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

+0

我知道你是怎么增加结构数量的..我只是不能了解你是如何命名每个结构的。你能帮我理解吗? :) – user3108849

+0

@ user3108849。除了列表中的第一个和最后一个之外,我没有列出任何结构。你从第一个开始,沿着'next'指针前进,直到你点击NULL。这样你就不需要知道名字。我已经添加了一个如何在列表中列印所有值的例子来说明。 –

+0

我想我会选择包括命名在内的其中一个。非常感谢您的关注:) – user3108849

1

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

我觉得每个初学者都开始想要命名一切。这并不令人惊讶 - 您了解如何使用变量来存储数据,因此您总是使用变量似乎很自然。答案是,但是,不是总是使用变量来存储数据。通常,您将数据存储在动态创建的结构或对象中。这可能有助于阅读有关dynamic allocation。这个想法是,当你有一个新的数据存储,你要求一个内存(使用库调用如malloccalloc)。你可以通过它的地址来引用那块内存,即指针

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

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

通常需要一点时间才能熟悉指针,但它非常值得您付出努力,因为它们为您在程序中存储和操作数据开辟了许多可能性。享受车程。

+0

“我认为每个初学者都会开始想要命名所有内容,这并不令人惊讶 - 您了解如何使用变量来存储数据,所以这似乎很自然,你总是使用变量“ 是的,这正是我的情况。作为一名初学者的经验丰富,你能给我一些建议吗?因为我在这里很困惑.. – user3108849

+0

我被要求建立一种社交网络,程序会从文件中获取命令并应用它们。我想为每个用户创建结构,并将它们命名为user1,user2等。是不是错误?该命令将会像例如“让约翰·史密斯和简·杜受到制约。”我会寻找约翰和简的结构,并让他们成为朋友。我应该使用哪种方法? – user3108849

+0

是的,对每个用户使用变量是错误的方法。在真实的社交网络中,每个用户可能会被表示为数据库表中的记录,并且您可能会有另一个表格来表示用户之间的关系。但这很先进。我建议学习数组和链表,如其他答案所示。熟悉动态内存分配。然后绘制一幅你希望程序如何表示数据的图片,每个结构都有一个框,每个指针有一个箭头。 – Caleb