我在ANSI C中工作,有很多固定长度的数组。不是为每个数组设置数组长度变量,而是在数组末尾添加“NULL”终结符似乎更容易,类似于字符串。我现在的应用程序我正在使用“999999”,这在实际数组中永远不会发生。我可以通过查找终结符来执行循环并确定数组长度。这是一种常见的方法吗?它有什么问题?感谢。
答案 0 :(得分:2)
这种方法在技术上由main
参数使用,其中最后一个值是终端NULL
,但它还附带一个argc
,告诉您大小。
仅使用终端听起来更容易在将来出错。将大小与数组一起存储有什么问题?
类似的东西:
struct fixed_array {
unsigned long len;
int arr[];
};
这也会更有效,更不容易出错。
答案 1 :(得分:1)
这种方法的主要问题是,如果不循环到数组末尾,就无法提前知道长度 - 如果只想确定长度,那么这会对性能产生负面影响。
答案 2 :(得分:1)
我能想到的主要问题是跟踪长度可能很有用,因为C中有内置函数,它们将长度作为参数,你需要知道长度才能知道在哪里添加下一个元素也是。
实际上,它取决于数组的大小,如果它是一个巨大的数组,那么你应该跟踪它的长度。否则,每次想要将元素添加到结尾时,循环遍历它以确定长度将非常昂贵。 O(n)代替你通常使用数组的O(1)时间
答案 3 :(得分:0)
为什么不是
const int
初始化它,稍后您可以在代码中使用它来检查尺寸,或者int len = sizeof(my_array) / sizeof(the_type)
。答案 4 :(得分:0)
由于你使用二维数组来保存一个不规则的数组,你可以使用一个参差不齐的数组:type *my_array[];
。或者您可以将长度放在每行的元素0中,并将行视为1索引数组。有了一些邪恶的诡计你甚至可以把长度放在每行的元素-1上![1]