【问题标题】:Does it make sense to have both name and a pointer to a structure?同时拥有名称和指向结构的指针是否有意义?
【发布时间】:2021-12-03 12:56:23
【问题描述】:
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;

指针用于结构。 同时拥有名称和指针有意义吗?他们为什么要使用它?

【问题讨论】:

  • 如果您阅读了一些关于 SO 的内容,您会注意到为指针使用 typedef 通常被称为不好的做法,因为它将指针的性质隐藏在类型名称后面。结果,尤其是初学者对传递正确参数或从函数返回指针所需的* 的数量感到困惑。

标签: c pointers struct coverity


【解决方案1】:

因为这个声明是一个typedef,它定义了类型,而不是变量。 net_path_t 是此结构类型的另一个名称,net_path_pt 是指向此结构类型的指针的另一个名称。你不需要两者都有。

出于某种原因,有些人更喜欢写net_path_pt 而不是net_path_t*。定义指针 typedef 似乎在旧 API 中很常见。

【讨论】:

    【解决方案2】:

    这些是同时完成的两件事(甚至可能是三件事)。可以先分解成:

    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;
    

    创建两个typedefs。一个是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;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      相关资源
      最近更新 更多