是否可以说
int filename = 0;
typedef struct{
char name;
char sname;
int number;
}foo;
foo filename;
filename++;
foo filename;
并有一个名为1的新foo结构和另一个名为2的
答案 0 :(得分:2)
C不是解释语言,因此无法创建变量名运行时。另一种方法是创建具有多个实例的数组。
typedef struct{
char name;
char sname;
int number;
}foo;
foo *files = malloc(sizeof(foo)*3);
files[0].name = "A";
files[1].name = "B";
files[2].name = "C";
修改:使用了malloc instad new foo[3]
答案 1 :(得分:1)
不,这是不可能的。声明foo filename;
将尝试声明另一个名为filename
foo
的变量,因此整数值将永远不会在那里发挥作用。
此外,不允许在同一范围内引入另外两个名为filename
的变量。
答案 2 :(得分:0)
如果您经常更改其大小,则可能需要链接列表而不是数组。然后,您的代码看起来像:
typedef struct node{
char name;
char sname;
int number;
struct node* next;
}foo;
您将使用以下函数添加新节点/获取节点:
foo head = NULL;
void addNode(foo newNode)
{
if(head == NULL)
head = newNode;
else
{
foo temp = head;
while(foo->next != NULL)
foo = foo->next;
foo->next = newNode
}
}
foo fetchNode(int index)
{
if(index < 0)
return NULL;
int n = 0
foo temp = head;
while(n < index && temp != NULL)
{
temp = temp->next;
n++;
}
return temp;
}
这种方式的工作方式是每个节点都有必要的数据,以及指向下一个节点的指针,如果它是最后一个节点则为NULL。然后,您只需要指向第一个指针,您可以通过遍历下一个指针来获取节点。这也使删除位于列表中间的节点变得微不足道。