C 中的结构指针

Struct Pointers in C

typedef struct data * Data;

我有这样的事情我不明白。稍后我对该 returns 数据有一些功能。我不明白的是, data * Data 在我看来就像一个 "empty" 结构 .. 它里面没有任何东西。

那么,当我执行类似 Data d; 的操作时,我会创建什么?如果此结构为空,我会 returns 从函数中创建什么?

谢谢。

该行代码正在创建一个 类型别名 。这意味着 Data 是类型 struct data * 的别名。所以,每当你看到 Data,就好像你看到了一个指向 struct data.

的指针

当你做类似 Data d; 的事情时,你基本上是在声明一个指向 struct data 指针 。您没有初始化指针,因此它没有指向有效的 struct data。因此取消引用指针将是无效的。

当你有一个 Data 类型的变量时,你需要在尝试取消引用它之前将它指向有效的地方。

也许不那么令人困惑的方法是改为这样做:

typedef struct data *Data_ptr;

这至少会传达出 Data_ptr 是指针类型别名的想法。

您正在查看 opaque pointer

这意味着结构细节对您是隐藏的,但使用它的库函数知道结构的真实内容。

这种类型的声明通常在public头文件中进行,而更多的私有实现使用结构的完整声明。