1

我阅读了 Kernigan & Ritchie 的“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},
          {?,?,?}
      };

谢谢你。

4

2 回答 2

1

关键是,通过将最后一条记录设置为 NULL,您可以在遍历数组时轻松识别数组的结尾。

在您没有指针的情况下,您仍然可以认为一些“特殊”值来指示结束,也许count并且index永远不会在您的应用程序中为负数,因此看到小于 0 的值可能是您可以使用的标记可靠地找到终点。结束标记的另一个常见选择可能是~0(即全 1)。

或者,您可以只size_t使用它。

于 2013-02-09T09:59:07.843 回答
1

您可以发明特殊的枚举值(例如-1),将其用作最后一个条目的标记。

于 2013-02-09T09:59:25.660 回答