同时拥有名称和指向结构的指针是否有意义?

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 类型的指针”。有 charchar* 是指向它的指针。 char* 看起来只是 char 的变体,如 char a, *b, c;.

人类通常更容易以“一种指向 X 的指针”的方式思考。这就是 typedef char* 的基本原理,例如。 pstr。现在 pstr 看起来像是一种类型。所以你写 char a, c; pstr b;.