0

编辑:这些结构定义是给我的,不能以任何方式改变。

假设struct DB我想访问 db 中第三个元素的名称。我该怎么做呢?我想我可以做到这一点:

DB->db[2].name;

但这不起作用。

另外,我如何将这些结构之一定义为函数内的参数?

typedef struct {
    char name[MAX_NAME + 1];
    unsigned long pass;
} DBEntry;

typedef struct {
    DBEntry db[MAX_ENTRIES];
    int size;
} DB;
4

4 回答 4

3

首先,您必须为 struct 创建对象DB。然后你可以访问它的成员。

DB obj;
strcpy(obj.db[2].name, "abc");
于 2013-04-19T04:18:54.713 回答
2

这些是类型,而不是变量

要使用它们:

DB db;
db.size = 1;
strcpy(db.db[0].name, "name");
db.db[0].pass = 0xdeadbeef;
...
于 2013-04-19T04:19:05.513 回答
2

首先,没有struct DB; 有一个类型名称DB标识未标记的结构类型,但它与struct DB.

如何访问元素取决于变量声明:

DB  db1 = ...;
DB *db2 = ...;

使用 variable db1,您可以使用以下方式访问第三个元素的名称:

printf("%s\n", db1.db[2].name);

使用 variable db2,您可以使用以下方式访问第三个元素的名称:

printf("%s\n", db2->db[2].name);

您可以使用以下方法定义一个采用这些类型的函数:

void magic_function(DB db1, DB *db2, DBEntry de1, DBEntry *de2)
{
    printf("%s\n", db1.db[0].name);
    printf("%s\n", db2->db[0].name);
    printf("%s\n", de1.name);
    printf("%s\n", de2->name);
}

您可以使用以下方法在标头中声明它:

extern void magic_function(DB db1, DB *db2, DBEntry de1, DBEntry *de2);

就个人而言,我更喜欢extern那里与在同一个标​​头中声明的那些罕见的全局变量的声明对称extern,但它实际上不是必需的(extern如果省略则假定)。如果该函数仅从单个源文件中引用,那么它static当然应该是 (并且没有在任何头文件中声明)。

于 2013-04-19T05:50:47.617 回答
1

首先,您必须像这样声明为对象..

DB db1;
db1.db[0].pass = 35;

我认为,在您的代码中,您必须尝试存储名称数量并访问这些元素。如果您尝试这样做,您的DBEntry结构应该是

typedef struct {
    char *name[MAX_NAME + 1];
    unsigned long pass;
} DBEntry;
于 2013-04-19T04:20:52.567 回答