C语言 在指针结构定义后添加星号使其成为双指针吗?



我有一个结构体

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的点感到困惑。

这是否使temp成为双指针

是的。但是请使用术语指针对指针,不要与double*混淆。

匈牙利语注释方式和其他令人困惑的样式,你在类型名称前面添加一个p来表明隐藏在它下面的指针,这些年来一直受到大量批评,最著名的例子是Windows API。这是一种不愿消亡的古老、糟糕的风格。

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

  • 指针永远不应该隐藏在typedef下面,因为它对每个人都很困惑,包括编写代码的人,正如你所发现的。
  • "匈牙利notation"和类似的样式不应该使用,因为它们容易混淆和危险。

你用hash_entry*代替的本能是合理的。