不知道如何使用这些作为原型提供的未命名结构。C

不知道如何使用这些作为原型提供的未命名结构。C,c,struct,C,Struct,编辑:这些结构定义是给我的,不能以任何方式更改 假设在structdb中,我想访问DB中第三个元素的名称。我该怎么做呢?我认为我能够做到这一点: DB->db[2].name; 但这不起作用 另外,如何将这些结构中的一个定义为函数中的参数 typedef struct { char name[MAX_NAME + 1]; unsigned long pass; } DBEntry; typedef struct { DBEntry db[MAX_ENTRIES]

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

假设在
structdb
中,我想访问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;

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

DB obj;
strcpy(obj.db[2].name, "abc");
这些是类型,而不是变量

要使用它们:

DB db;
db.size = 1;
strcpy(db.db[0].name, "name");
db.db[0].pass = 0xdeadbeef;
...

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

DB db1;
db1.db[0].pass = 35;
我认为,在您的代码中,您试图存储名称的数量和对这些元素的访问。如果您尝试这样做,您的
DBEntry
结构应该是

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

首先,没有结构数据库;有一个类型名
DB
,用于标识未标记的结构类型,但它与
struct DB
是分开的

访问元素的方式取决于变量声明:

DB  db1 = ...;
DB *db2 = ...;
使用变量
db1
,您可以通过以下方式访问第三个元素的名称:

printf("%s\n", db1.db[2].name);
printf("%s\n", db2->db[2].name);
使用变量
db2
,您可以使用以下方法访问第三个元素的名称:

printf("%s\n", db1.db[2].name);
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
如果省略,则假定为)。如果函数仅从单个源文件引用,那么它当然应该是静态的(并且不在任何标题中声明)。

你说的“不工作”是什么意思?什么使你认为它不起作用了?
DB
是指针吗?如果不是,您不需要
->
操作符,而是需要
。(显示更多代码可能会有帮助。比如“不工作”部分的上下文。)请发布“不工作”的代码好吗?