当我继续学习C语言时,我有一个疑问。使用其中每个元素是结构的数组和使用其中每个元素是指向同一类型结构的指针的数组之间的区别。在我看来,你可以平等地使用它们(虽然在指针中你必须处理内存分配)。有人可以解释我在哪种情况下最好使用其中一种吗?
谢谢。
答案 0 :(得分:5)
结构数组和结构指针数组是组织内存的不同方法。
结构阵列具有以下优点:
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所暗示的那样,人们可以通过一方面分配一组结构和一个指向第一个元素的单独指针数组来结合两种方法的一些优点。阵列。这是一种实现排序顺序的方便方法,甚至是带有单独指针数组的多个伴随排序顺序,如数据库索引。