我阅读了Kernigan&撰写的第二版“C编程语言”的第6.3段。里奇。
一些结构:
struct key {
char *word;
int count;
} keytab[NKEYS] {
{ "auto", 0 },
{ "break", 0 },
{ "case", 0 },
{ "char", 0 },
{ "const", 0 },
{ "continue", 0 }
};
作者写了这篇文章:
数量NKEYS是keytab中的关键字数量。虽然我们 可以手工计算,这样做更容易,更安全 机器,特别是如果列表可能会有变化。 一种可能性 将使用空指针终止初始化程序列表, 然后沿keytab循环,直到找到结束。
如果枚举只包含指针,那么一切都会很清楚:
struct key {
char *word;
char *description;
} keytab[NKEYS] {
{ "auto", "" },
{ "break", "" },
{ "case", "" },
{ "char", "" },
{ "const", "" },
{ "continue", "" }
{ NULL, NULL}
};
但是每条记录都没有指针,但也有int
。如果我理解作者,那么最后一条记录必须如下:
{ NULL, ? }
没有指针呢?
如何为不包含指针的枚举解决它?例如:
enum myEnum {
int index;
inr count;
double value;
} myVariable[] {
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0},
{?,?,?}
};
谢谢。
答案 0 :(得分:1)
关键是通过将最后一条记录设置为NULL,您可以在迭代时轻松识别数组的末尾。
如果您没有指针,您仍然可以认为某些“特殊”值表示结束,可能count
和index
在您的应用程序中永远不会是负面的,所以看到小于0的值将是可用于可靠地找到结束的标记。结束标记的另一个常见选择可能是~0
(即所有1)。
或者你可以随身携带一个size_t
。
答案 1 :(得分:1)
您可以创建特殊的枚举值(例如,-1
),您可以将其用作最后一个条目的标记。