我正在ANSI C中使用很多固定长度的数组。与其为每个数组设置数组长度变量,似乎更容易在数组末尾添加“NULL”终结符,这与字符串类似。 Fot我当前的应用程序我正在使用“999999”,这将永远不会发生在实际的阵列。我可以通过查找终止符来执行循环并确定数组长度。这是一种常用的方法吗?它有什么问题?谢谢。可以使用终结器来管理固定长度的数组吗?
回答
我能想到的主要问题是跟踪长度可能很有用,因为在C中的函数中建立了以长度作为参数的函数,并且您需要知道长度以知道在哪里添加下一个元素。
在现实中,它取决于你的数组的大小,如果它是一个巨大的数组,比你应该跟踪的长度。否则循环通过它来确定每次你想添加一个元素到最后的长度将是非常昂贵的。 O(n)而不是O(1)的时间,你通常得到与阵列
这种方法的主要问题是,如果您只想确定长度,您无法预先知道长度而不循环到数组的末尾 - 并且会对性能产生很大的负面影响。
您的main
参数在技术上使用此方法,其中最后一个值是终端NULL
,但它也伴随着一个告诉您大小的argc
。
只使用终端听起来像是在将来更容易出错。将大小和数组一起存储有什么问题?
喜欢的东西:
struct fixed_array {
unsigned long len;
int arr[];
};
这也将是更有效和更容易出错。
你为什么不只是
- 与
const int
以后可以使用代码来检查大小,或 - 使用
int len = sizeof(my_array)/sizeof(the_type)
初始化。
使用'size_t'而不是'int'。 –
我的大部分数组都是二维的,所以size_t length = sizeof(myArray)/ sizeof(type)给了我整个数组中元素的数量。我需要每行中的元素数量。如何做到这一点? – MonkeyBusiness
@MonkeyBusiness,把这个关键的细节添加到问题中! –
由于您使用二维数组来保存一个衣衫褴褛的数组,您可以使用一个不齐的数组:type *my_array[];
。或者你可以把长度放在每行的元素0中,并将这些行视为1索引数组。随着一些邪恶的欺骗,你甚至可以把长度在每行的元素-1 [1]
- 左锻炼;!)
- 1. 可以使用sizeof()来定义数组长度吗?
- 2. Can Go函数可以指定特定的数组长度吗?
- 3. 固定长度的数量以及
- 4. 声明结构中的固定长度变量数组
- 5. 解析具有固定长度字段的可变长度数组的消息
- 6. 你可以扩展pack()来处理自定义,可变长度的字段吗?
- 7. 固定长度
- 8. 在结构体内写入固定长度数组
- 9. 如何在C#中创建可以使用指针访问的非托管嵌套固定长度结构
- 10. 来自Sqoop的固定长度文件
- 11. 我可以使用两级可变长度参数函数吗?
- 12. 可变长度参数可以代替单维数组吗?
- 13. MySQL固定长度和可变长度数据类型
- 14. 如何使固定长度
- 15. 使用不同固定长度的TextFieldParser
- 16. 使用LINQ来获得数组的长度的长度
- 17. Linq的Like运算符与固定长度(我们可以用 “_”?)
- 18. 从变长列表创建固定长度的numpy数组
- 19. 是否可以在不使用固定长度数组的情况下使用Disruptor/Ringbuffer模式?
- 20. 可以使用Cognito组来管理Athena中的行/列级别访问吗?
- 21. 可以用cleanNode()来清理绑定吗?
- 22. 用相同的值填充一个固定长度的数组
- 23. 可以在终结器中使用互锁吗?
- 24. c#和大端转换中的固定/可变长度结构
- 25. Can Twig可以用过滤器参数计算数组长度
- 26. 连续,固定长度的可变长度序列批次
- 27. 我可以使用龙卷风来管理HTTP 1.1请求吗?
- 28. 您可以使用Nuget/OpenWrap来管理远程部署吗?
- 29. 我可以使用uWSGI皇帝来管理后台进程吗?
- 30. 使用python设置固定长度
出了什么问题'的sizeof(my_array)/的sizeof(my_array_type) '? –
@Ed:sizeof(my_array)/ sizeof(* my_array)'给出了数组的大小(容量),而不是根据程序逻辑使用的实际元素。 –
如果你使用固定长度的数组,那你为什么需要终止它们?终结者用于可变长度的字符串/数组。如果他们实际上是可变长度的,那么@yan在下面有正确的答案。 – unpythonic