在指针结构定义后添加星号是否使其成为双指针?
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*
的直觉是正确的。
我有一个结构
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*
的直觉是正确的。