在指针结构定义后添加星号是否使其成为双指针?

Does adding a star after a pointer struct definition make it a double pointer?

我有一个结构

typedef struct hash_entry_{
   char *string;
   void *data;
   struct hash_entry *next;
}hash_entry, *p_entry;

我稍后在我的代码中引用 p_entry

p_entry *temp = table;

这是否使 temp 成为双指针,因为我在 p_entry 之前添加了一个额外的 *。当我可以使用 hash_entry* 作为指向 hash_entry_ 类型的结构的指针时,我什至对在我的代码中添加 p_entry 感到困惑。

does this make temp a double-pointer

是的。但请使用术语 pointer-to-pointer,不要与 double*.

混淆

多年来,“匈牙利表示法”和其他在类型名称前添加 p 以指示指针隐藏在其下方的混淆样式的方式受到了广泛批评,最well-known 案例是 Windows API。这是不肯死的老坏风格。

在现代编程中,C 程序员有一个强烈的共识:

  • 指针永远不应隐藏在 typedef 下面,因为正如您所发现的,这会让包括编写代码的人在内的所有人感到困惑。
  • 不应使用“匈牙利符号”和类似样式,因为它们会造成混淆和危险。

你使用 hash_entry* 的直觉是正确的。