零长度数组
在 C 中,可以定义包含零长度数组的结构。这被称为 C-Hack,在某些情况下很有用。
案例研究
最近的代码重构揭示了几个具有零长度数组的结构,例如如:
struct someData { int nData; BYTE byData[0]; }
为什么长度为零数组?
通常,编译器会针对零长度数组生成警告,但在这种情况下,警告被抑制。使用零长度数组的一个可能原因是允许在运行时创建任意长度的数组。
使用零长度数组创建结构
尝试创建使用“new”运算符的零长度数组的新结构将导致错误。相反,可以使用以下技术:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
此函数为 someData 类型的对象及其指定大小的 byData 数组分配内存。
替代方法
在许多情况下,更合适的方法是使用长度为 1 的指针或数组,而不是长度为零的数组 大批。这将消除对自定义内存分配的需要,并使代码更具可读性和可维护性。
结论
在某些情况下,零长度数组可能是一种有用的技术,但应谨慎使用。在大多数情况下,替代方法(例如长度为 1 的指针或数组)更合适,并且会使代码更易于理解和维护。
以上是为什么在 C 结构中使用零长度数组?的详细内容。更多信息请关注PHP中文网其他相关文章!