我有数组 A,我想将此数组从位置 x 复制到 y 到 C 语言中的另一个数组。请帮助在 c 中创建它。
使用 memcpy 仅从头开始复制数组。我想从特定位置复制到另一个位置。
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int b[5];
memcpy( b, a + 5, 5 * sizeof( int ) );
您也可以使用普通的 for 循环来执行此操作
for ( int i = 0; i < 5; i++ ) b[i] = a[i+5];
由于您要复制到另一个数组中,因此可以使用memcpy()
:
memcpy(another_array, array + x, (y - x) * sizeof(*array));
如果您要复制到同一个数组中,则应memmove()
改为使用。
memmove(array + z, array + x, (y - x) * sizeof(*array));
对于每个,第一个参数表示目的地,并且函数假设目的地有足够的空间来接受完整的副本。
memcpy
如果这是您传递的地址,则仅从数组的开头复制。数组的名称a
与第一个元素的地址同义&a[0]
,因此如果这样做memcpy(dest, src, size)
,则副本将从数组的开头开始src
。
指针算法可用于从数组中更远的点开始复制。例如,要从 array 中的元素 2 开始复制 10 个元素src
,您可以这样做:
size_t size = 10 * sizeof (int);
int * dest = malloc(size);
memcpy(dest, src + 2, size); // or equivalently, &src[2]
for(i=x, j=0; i<=y; i++, j++)
AnotherArray[j]= A[i];
memcpy
void * memcpy (void * destination, void * source, size_t size)
该memcpy
函数从源内存位置复制一定数量的字节并将它们写入目标位置。(文档)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int some_array[] = {10, 11, 12, 13, 14};
int memory_amount = sizeof(some_array);
int item_count = memory_amount / sizeof(some_array[0]);
int *pointer = malloc(memory_amount);
memcpy(pointer, &some_array, memory_amount);
while (item_count--)
printf("%d=%d\n", item_count, *(pointer + item_count));
free(pointer);
return 0;
}
$ ./a.out
4=14
3=13
2=12
1=11
0=10