使用相同长度的数组时,请考虑创建一个只包含数组的结构,这样只需将结构复制到另一个数组中就可以更轻松地复制数组。
结构的定义和声明如下:
typedef struct {
char array[X]; /* X is an arbitrary constant */
} Array;
Array array1;
然后,只需执行以下操作即可执行复制:
Array array2;
array2 = array1;
我发现这是复制数组的最快方法。它有什么缺点吗?
编辑: X是一个任意常量,假设为10.数组不是可变长度数组。
答案 0 :(得分:2)
X可以是任意的(直到编译环境的限制),但对于Array
类型的所有对象,它(自然地)是相同的数字。如果你需要将许多相同长度和类型的数组相互复制,那么就没有什么本质上的错误,尽管访问这些数组可能比平时更麻烦。
Array array1;
array1.array[0] // to access the first element
答案 1 :(得分:1)
这很好用,但由于X
必须在编译时定义,所以它相当不灵活。您可以使用memcpy
在任意长度的数组上获得相同的性能。实际上,编译器通常会将array2 = array1
转换为对memcpy
的调用。
正如评论中所提到的,直接赋值是否被转换为memcpy
调用取决于数组的大小以及其他编译启发式。
答案 2 :(得分:1)
它完全取决于您使用的编译器和优化级别。编译器“应该”将其减小到具有常量大小的memcpy,而这应该减少到用于复制各种大小的内存块的任何机器特定操作。如今,小块应该是高度机器特定的。实际上调用memcpy库函数来复制4个字节将是“10年前”。
通过优化所有性能投注均已关闭。