同时拥有名称和指向结构的指针是否有意义?
Does it make sense to have both name and a pointer to a structure?
typedef struct net_path_s
{
uint8 path_len; /* network path length */
uint8 net_path[2 * MAX_ROUTE_LEN]; /* network path */
} net_path_t, *net_path_pt;
指针是针对结构的。
同时拥有名称和指针有意义吗?他们为什么使用它?
因为这个声明是一个 typedef
它定义了类型,而不是变量。 net_path_t
是这个结构类型的别名,net_path_pt
是这个结构类型的指针的别名。你不需要两者都拥有。
出于某种原因,有些人更喜欢写 net_path_pt
而不是 net_path_t*
。定义指针类型定义似乎在较旧的 API 中很常见。
这是同时完成的 2 件事(甚至可能是 3 件事)。它们可以首先分解为:
struct net_path_s
{
uint8 path_len; /* network path length */
uint8 net_path[2 * MAX_ROUTE_LEN]; /* network path */
};
定义了一个struct
.
第二个:
typedef net_path_s net_path_t, *net_path_pt;
创建两个 typedef
。一个是 net_path_t
,它是 net_path_s
的别名,另一个是 net_path_pt
,它是 net_path_s*
.
的别名
后者在概念上是“创建指针类型”。
C 语法是“指向 X 类型的指针”。有 char
和 char*
是指向它的指针。 char*
看起来只是 char
的变体,如 char a, *b, c;
.
人类通常更容易以“一种指向 X 的指针”的方式思考。这就是 typedef char*
的基本原理,例如。 pstr
。现在 pstr
看起来像是一种类型。所以你写 char a, c; pstr b;
.
typedef struct net_path_s
{
uint8 path_len; /* network path length */
uint8 net_path[2 * MAX_ROUTE_LEN]; /* network path */
} net_path_t, *net_path_pt;
指针是针对结构的。 同时拥有名称和指针有意义吗?他们为什么使用它?
因为这个声明是一个 typedef
它定义了类型,而不是变量。 net_path_t
是这个结构类型的别名,net_path_pt
是这个结构类型的指针的别名。你不需要两者都拥有。
出于某种原因,有些人更喜欢写 net_path_pt
而不是 net_path_t*
。定义指针类型定义似乎在较旧的 API 中很常见。
这是同时完成的 2 件事(甚至可能是 3 件事)。它们可以首先分解为:
struct net_path_s
{
uint8 path_len; /* network path length */
uint8 net_path[2 * MAX_ROUTE_LEN]; /* network path */
};
定义了一个struct
.
第二个:
typedef net_path_s net_path_t, *net_path_pt;
创建两个 typedef
。一个是 net_path_t
,它是 net_path_s
的别名,另一个是 net_path_pt
,它是 net_path_s*
.
后者在概念上是“创建指针类型”。
C 语法是“指向 X 类型的指针”。有 char
和 char*
是指向它的指针。 char*
看起来只是 char
的变体,如 char a, *b, c;
.
人类通常更容易以“一种指向 X 的指针”的方式思考。这就是 typedef char*
的基本原理,例如。 pstr
。现在 pstr
看起来像是一种类型。所以你写 char a, c; pstr b;
.