c - 为什么我可以在声明之前使用结构类型的指针
问题描述
为什么我可以在没有任何声明的情况下编译下面的代码?
struct node *n;
int main()
{
return 0;
}
我没有包含任何标题。这是正常的吗?
解决方案
指针定义充当 的前向声明。struct node
只要在实际结构定义出现之前未取消引用指针,就允许使用这样的声明。
这是允许这样的构造所必需的:
struct list_node {
int value;
struct list_node *next;
};
这是链表中节点的典型定义。该next
字段的类型为struct list_node *
,但此时struct list_node
尚未完全定义。如果不允许这样的前向声明,那么这样的构造是不可能的。
您还可以使用这样的指针传递给函数并获取返回值。例如:
struct node *n = new_node();
set_node_value(n, 1);
这两个函数可以在一个单独的源文件中定义,其中的完整定义struct node
是已知的。这种情况下的结构是一种不透明的类型,图书馆的用户不需要知道它的细节。
推荐阅读
- javascript - React.createElement:类型无效——期望一个字符串,但得到:未定义
- r - 随机化 R 数据表中组的顺序,同时保留组的内部顺序
- security - Spectre Attack中进程如何共享array2(oracle数组)?
- sql - 在 SQL SERVER 中获取日期范围内的列的第一个非空值的最快方法
- csv - Javamail - CSVPrinter:发送带有 csv 附件的电子邮件
- c# - Aspose.Cells.CellsException - “您正在使用评估副本并且打开的文件超出限制”
- javascript - JS 模块中的 Javascript 跨域重定向
- node.js - 全局安装 Angular cli 时出错
- azure-devops - Azure DevOps 管道“正在等待来自代理的控制台输出......”
- c++ - 这种无锁 dlist 插入是否安全?