我有一堆各种长度的数组,我想使长度接近数组,定义这样的东西是不好的编程习惯吗?
typedef struct Array {
long len;
int* buf;
} Array;
这是否有明显的缺点或陷阱?
答案 0 :(得分:2)
不,不一定。您将需要使用指针传递缓冲区的长度,以确保您不会溢出它。由于额外的取消引用,这将对性能造成轻微影响,但是如果始终具有可用的长度以避免引起错误,则这可能是一个值得权衡的选择。如果调整缓冲区大小,则需要确保更新长度,如果释放结构,请确保释放缓冲区。除此之外,这对我来说很有意义,这是许多其他高级语言在其数组实现中所做的事情。
答案 1 :(得分:1)
这很好,通常对计数字符串(也称为向量)使用类似的结构,这些字符串不以null终止,因此需要存储其长度。如果阵列仅在本地使用,我不会为这种方法所困扰。
如前所述,最好使用无符号类型,例如size_t
或uint32_t
作为长度。
在处理指针时,需要采取通常的预防措施,以确保在使用或传递指针之前始终具有有效的引用,释放已分配的内存等。强烈建议使用 valgrind 。