首页 > 解决方案 > C中这两种结构声明之间的区别

问题描述

我正在为大学做这个项目,他们给了我一个示例代码,可以在声明结构时使用,另一个是我如何使用 PowerPoint 和其他学习材料上的信息来声明它。

这是他们给我的代码:

typedef struct sala local, *plocal;
struct sala {
    int id;
    int capacidade;
    int liga[3];
};

这是我做的另一个结构的代码:

typedef struct pessoa {
    char id[15];
    int idade;
    char estado;
    int dias;
} pessoa;

任何人都可以向我解释其中的区别吗?

在我的代码编辑器中,“local”和“*local”以蓝色显示。(我使用 Netbeans)。

标签: cdata-structuresstructtypedeftype-definition

解决方案


这个 typedef 声明

typedef struct sala local, *local;
struct sala {
    int id;
    int capacidade;
    int liga[3];
};

无效,因为名称local被声明了两次,具有不同的含义:第一个作为 type 的别名,struct sala第二个作为 type 的别名struct sala *

这是第一个和第二个 typedef 声明之间的区别。:)

至于 typedef 声明的放置,那么它可以放置在相应的结构定义之前。与结构定义一起或在结构定义之后。

例如

typedef struct A A;
struct A
{
    int x;
};

或者

typedef struct A
{
    int x;
} A;

或者

struct A
{
    int x;
};

typedef struct A A;

这些声明之间的本质区别在于,如果您想在其定义中引用已定义的结构,那么在第二种和第三种情况下,您必须使用类型名称struct A,因为尚未声明 typedef 名称 A。

例如

typedef struct Node Node;
struct Node
{
    int x;
    Node *next;
};

但例如

typedef struct Node
{
    int x;
    struct Node *next;
} Node;

推荐阅读