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头文件中进行,而更多的私有实现使用结构的完整声明。
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头文件中进行,而更多的私有实现使用结构的完整声明。