在C中是否有办法将数组的所有元素复制到另一个元素中,而不解析要复制的数组的所有元素?我可以使用指针吗?因为我知道一个函数可以自动地取一个数组的元素只是说第一个元素的索引,所以可能(?)我可以做类似的事情......
例如,如果我有这两个数组:
int array[10];
int tocopy[3];
我说的是:
array[0] = tocopy
它会自动填充数组[1] 和数组[2]
这可能吗?
答案 0 :(得分:5)
您可以使用memmove()
,或者,如果数组不重叠,memcpy()
:
void *memmove(void *dest, const void *src, size_t n);
void *memcpy(void *dest, const void *src, size_t n);
例如:
memmove(array, tocopy, sizeof(tocopy);
就像在做:
array[0] = tocopy[0];
array[1] = tocopy[1];
array[2] = tocopy[2];
正如注释中所建议的那样,在使用这些函数时也要注意不要超过数组边界,即:在为数组分配的内存之外读取或写入。
答案 1 :(得分:1)
您最好的选择可能是for
循环。你可以创建一个函数来隐藏"细节
void arrcopy(int *restrict dst, int dstindex, const int *restrict src, int srcindex, int len) {
for (int k = 0; k < len; k++) {
dst[dstindex + k] = src[srcindex + k];
}
}
你是这样称呼它的,例如将tocopy
的前三个元素复制到array
的前三个元素
arrcopy(array, 0, tocopy, 0, 3); // array[0,1,2] = tocopy[0,1,2]
要将tocopy
的第2,第3和第4个元素(假设它们存在)复制到array
的第6,第7和第8个元素,您可以像这样调用函数
arrcopy(array, 5, tocopy, 1, 3); // array[5,6,7] = tocopy[1,2,3]
当然,请务必不要超越数组范围。