我想知道将两个不同的数组组合成一个更大的数组的最快(或非常快)的方法是什么。作为一个玩具示例,假设我想组合初始化数组
int smallArray0[3]
和 int smallArray1[2]
。
我可以只使用例如通过 malloc、memcpy 和 free 的指针,但我的印象是(如果我错了,请纠正我)将所有内容保留在堆栈中(对于较小数量的数据)会更快。因此,我们不要使用动态分配。
如果我想对数据进行实际的复制,我只能考虑声明一个
int biggerArray[5]
并使用 for/while 循环来填充它,如下所示:
for (int i = 0; i < 3; i++)
biggerArray[i] = smallerArray0[i];
for (i = 3; i < 5; i++)
biggerArray[i] = smallerArray1[i - 3];
是否有一种方法不必“实际”复制数据并拥有某种指针,该指针顺序指向 smallArray0
以及随后的
smallArray1
的所有元素?如果可以的话,会不会更快?我希望这是有道理的,如果没有,我很乐意澄清。
#include <stdio.h>
#define biggerArray(index) (*((index) < 3 ? smallerArray0 + (index) : smallerArray1 + (index) - 3))
int main(void) {
int smallerArray0[3] = {0, 1, 2};
int smallerArray1[2] = {3, 4};
biggerArray(4) = 10;
printf("%d %d\n", biggerArray(1), biggerArray(4));
}
宏需要使用
*(array+index)
语法,因为如果您在三元中使用普通数组索引语法,则它是不可分配的。