当我继续学习C语言时,我产生了疑问。使用每个元素是结构的数组与使用每个元素是相同类型的结构的指针的数组之间的区别是什么。在我看来,您可以同等使用两者(尽管在指针中您必须处理内存分配)。在这种情况下,有人可以解释一下吗?
谢谢。
结构数组和结构指针数组是组织内存的不同方法。
结构数组具有以下优点:
struct s *p = calloc(n, sizeof(*p));。struct s *prev = p - 1, *next = p + 1;它们也有缺点:
p[i].member产生一个乘法,如果结构的大小不是2的幂,则在某些体系结构上可能会很昂贵。使用指针数组具有以下优点:
NULL。此约定用于argv[]提供给该main()函数的命令行参数数组。NULL可以使用指针值指定缺少的元素。p[i].member产生一个简单的移位和一个额外的内存访问,但是可能比结构数组的等效表达式更有效。和以下缺点:
编辑:正如David Bowling所暗示的,可以通过一方面分配结构数组和指向第一个数组元素的单独指针数组,来结合两种方法的一些优点。这是一种实现排序顺序,甚至使用单独的指针数组(例如数据库索引)实现多个伴随的排序顺序的便捷方法。