可以使用终结器来管理固定长度的数组吗?

时间:2011-07-18 20:26:42

标签: c arrays

我在ANSI C中工作,有很多固定长度的数组。不是为每个数组设置数组长度变量,而是在数组末尾添加“NULL”终结符似乎更容易,类似于字符串。我现在的应用程序我正在使用“999999”,这在实际数组中永远不会发生。我可以通过查找终结符来执行循环并确定数组长度。这是一种常见的方法吗?它有什么问题?感谢。

5 个答案:

答案 0 :(得分:2)

这种方法在技术上由main参数使用,其中最后一个值是终端NULL,但它还附带一个argc,告诉您大小。

仅使用终端听起来更容易在将来出错。将大小与数组一起存储有什么问题?

类似的东西:

struct fixed_array {
   unsigned long len;
   int arr[];
};

这也会更有效,更不容易出错。

答案 1 :(得分:1)

这种方法的主要问题是,如果不循环到数组末尾,就无法提前知道长度 - 如果只想确定长度,那么这会对性能产生负面影响。

答案 2 :(得分:1)

我能想到的主要问题是跟踪长度可能很有用,因为C中有内置函数,它们将长度作为参数,你需要知道长度才能知道在哪里添加下一个元素也是。

实际上,它取决于数组的大小,如果它是一个巨大的数组,那么你应该跟踪它的长度。否则,每次想要将元素添加到结尾时,循环遍历它以确定长度将非常昂贵。 O(n)代替你通常使用数组的O(1)时间

答案 3 :(得分:0)

为什么不是

  1. 使用const int初始化它,稍后您可以在代码中使用它来检查尺寸,或者
  2. 使用int len = sizeof(my_array) / sizeof(the_type)

答案 4 :(得分:0)

由于你使用二维数组来保存一个不规则的数组,你可以使用一个参差不齐的数组:type *my_array[];。或者您可以将长度放在每行的元素0中,并将行视为1索引数组。有了一些邪恶的诡计你甚至可以把长度放在每行的元素-1上![1]

  1. 离开练习;)