c - 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)。
解决方案
这个 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;
推荐阅读
- python - 我无法理解“numpy.ndarray.dot”官方文档的详细信息
- html - 从另一个页面导航到页面的特定部分不起作用
- python - 为什么在拟合和预测模型时密集层 input_shapes 存在差异?
- r - 在 Alluvial 中进行的类似可视化
- c++ - 是否可以为零模板参数进行模板特化?
- angular - VSCode 打字稿自动导入
- python - txt 到 tfrecords 的转换
- c++ - 如何获取系统序列号?
- laravel - Laravel 中的登录系统向我显示这些凭据与我们的记录不匹配
- reactjs - 我应该始终从 connect 获取 redux store 还是通过 props 将其传递给子组件?