【问题标题】:Difference between these 2 declarations of structures in CC中这两种结构声明之间的区别
【发布时间】:2020-04-14 18:35:52
【问题描述】:

我正在为大学做这个项目,他们给了我一个示例代码,可以在声明结构时使用,另一个是我如何使用 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)。

【问题讨论】:

  • Netbeans 是否也让intdouble 显示为蓝色?
  • typedef struct sala local, *local; 无效:error: conflicting types for 'local'
  • @FiddlingBits int 和 double 以蓝色和 local 显示,*local 以浅蓝色显示
  • 在 typedef 中隐藏指针是一种非常糟糕的编程习惯
  • 很容易错过阅读一些包含隐藏指针的代码。在使用变量的地方使用 * 和/或 & 比隐藏在 typedef 中要好得多

标签: c data-structures struct typedef type-definition


【解决方案1】:

这个 typedef 声明

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

无效,因为名称 local 以不同的含义声明了两次:第一个是 struct sala 类型的别名,第二个是 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,因为尚未声明类型定义名称 A。

例如

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

例如

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

【讨论】:

  • 所以“local”就像结构底部的“pessoa”。是这样吗?
  • @MauroAbrantes 是的,它的含义相同,只是在第一个 typedef 声明中重新声明了名称 local,这会产生编译器错误。
  • 我确实犯了一个错误,对不起!它假设是“local, *plocal”。他们有什么区别?
  • @MauroAbrantes 在这种情况下,第一个 typedef 是正确的。除了结构的别名外,还声明了指向结构的类型指针的别名。
  • 所以我可以使用 *plocal 在程序中全局访问它,而无需使用辅助结构?
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 2011-09-29
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2020-10-13
  • 2020-06-07
相关资源
最近更新 更多