[英]Array of structs vs. Array of pointers to structs
当我继续学习C语言时,我产生了疑问。 使用每个元素是结构的数组与使用每个元素是相同类型的结构的指针的数组之间的区别是什么。 在我看来,您可以同等使用两者(尽管在指针中您必须处理内存分配)。 在这种情况下,有人可以解释一下吗?
谢谢。
结构数组和结构指针数组是组织内存的不同方法。
结构数组具有以下优点:
struct s *p = calloc(n, sizeof(*p));
一步就可以动态地动态分配这样的数组struct s *p = calloc(n, sizeof(*p));
。 struct s *prev = p - 1, *next = p + 1;
它们也有缺点:
p[i].member
生成一个乘法,如果结构的大小不是2的幂,则在某些体系结构上可能会很昂贵。 使用指针数组具有以下优点:
NULL
来确定。 此约定用于提供给main()
函数的argv[]
命令行参数数组。 NULL
指针值指定缺少的元素。 p[i].member
产生一个简单的移位和一个额外的内存访问,但可能比结构数组的等效表达式更有效。 和以下缺点:
编辑 :正如David Bowling所暗示的,可以通过一方面分配结构数组和指向第一个数组元素的单独指针数组,来结合两种方法的一些优点。 这是一种实现排序顺序,甚至是带有单独的指针数组(例如数据库索引)的多个并置排序顺序的便捷方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.