我正在尝试决定应该使用哪个。
我能想到指向结构体的优点有:
- 如果您不使用数组的所有元素,则浪费的空间较少。
- 交换数组元素时开销较小。
双方还有其他的优缺点吗?
我正在尝试决定应该使用哪个。
我能想到指向结构体的优点有:
双方还有其他的优缺点吗?
这些方法还有一些其他的区别:
struct
本身来表示此内容);struct
,而不是副本。同样,只有在这种情况在您的应用程序中语义上合理时才具有优势;struct
也在内存中彼此靠近,这在某些情况下可以提高性能);malloc()
,但它们经常需要realloc()
,正如caf所指出的,如果数组很大且内存空间被分段,这可能会成为问题。当然,realloc()
不适用于.bss或.text中的数组。我期待其他答案。好问题。realloc
函数适用于通过malloc
分配的动态内存,而不适用于在堆栈中声明或静态分配的数组... - Jason.bss
,而且我希望没有人会想要一个realloca()
函数! - Joseph Quinsey其中一个可能的缺点是,使用指针会给你,程序员带来更多的负担。你需要决定你的项目目标。
如果你不打算做很多排序和交换操作,而且你有足够的内存并且不打算完全利用它,那么你需要问自己是否值得使用指针给自己带来的麻烦。
指针数组需要存储指针和结构体的空间。然而,如果不同的结构体包含不同但不变的有意义数据量,使用结构体指针可以允许为它们分配不同数量的空间。在某些情况下,这种节省空间的方法可能比额外指针的成本更加划算。
使用指针数组访问结构体通常需要每次访问结构体时进行额外的表格查找步骤,而使用结构体数组则需要进行额外的乘法运算。在许多新架构中,乘法比表格查找更便宜,但在一些较小或旧的架构中则相反。此外,一些较小或旧的架构可能会对跨越某些内存边界的对象产生困难。即使在无法分配超过80字节的数组的架构上,分配一个由8个20字节结构体指针组成的数组仍然是可能的。