使用变量作为文件名创建C结构

时间:2011-08-13 15:24:01

标签: c struct

是否可以说

int filename = 0;  
typedef struct{  
    char name;  
    char sname;  
    int number;  
}foo;

foo filename;  
filename++;  
foo filename;

并有一个名为1的新foo结构和另一个名为2的

3 个答案:

答案 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。然后,您只需要指向第一个指针,您可以通过遍历下一个指针来获取节点。这也使删除位于列表中间的节点变得微不足道。