Arrays 创建一个包含其他数组元素的数组
假设我有两个数组,A[5]和B[3]。我想创建另一个数组C[8],该数组将包含A和B中的所有元素。首先它将存储A元素,然后存储B元素。我是C的初学者。因此任何人都可以提供帮助?您可以通过两个for循环来实现这一点。首先将内容从A复制到C:Arrays 创建一个包含其他数组元素的数组,arrays,c,Arrays,C,假设我有两个数组,A[5]和B[3]。我想创建另一个数组C[8],该数组将包含A和B中的所有元素。首先它将存储A元素,然后存储B元素。我是C的初学者。因此任何人都可以提供帮助?您可以通过两个for循环来实现这一点。首先将内容从A复制到C: for(int i = 0; i < 5; i++) C[i] = A[i]; 您可以使用memcpy。下面我假设这些是ints的数组,但是您可以用实际执行的类型替换sizeof(int) memcpy(C, A, 5 * sizeof(int
for(int i = 0; i < 5; i++)
C[i] = A[i];
您可以使用
memcpy
。下面我假设这些是int
s的数组,但是您可以用实际执行的类型替换sizeof(int)
memcpy(C, A, 5 * sizeof(int));
memcpy(C + 5, B, 3 * sizeof(int));
第一行表示从A开始复制5个整数到C开始。第二行表示从B开始复制3个整数到C,从索引5开始
编辑:正如评论中所指出的,我把这个问题复杂化了。您可以使用以下选项,而不必担心类型:
memcpy(C, A, 5 * sizeof(C[0]));
memcpy(C + 5, B, 3 * sizeof(C[0]));
通用函数
void *copy(void * restrict dest, const void * restrict src, const void * restrict src1, const size_t len1, const size_t len2, const size_t elemsize)
{
unsigned char *restrict ucdest = dest;
if(dest && src && src1)
{
memcpy(ucdest, src, elemsize * len1);
memcpy(ucdest + elemsize * len1, src1, elemsize * len2);
}
return dest;
}
你想要一张支票吗?您需要区分来自
A
和B
的代码吗?不需要区分。我只是需要命令。首先是A,然后是B。现在有一个例子,为什么使用对象大小而不是类型更好<代码>memcpy(C,A,5*sizeof(C[0])代码>并且数组的类型无关紧要。感谢提供更好的示例。回想起来,我最初的答案有点傻。你也可以只使用sizeof(A)
和sizeof(B)
而不使用乘法。@Barmar危险。如果B&A是指针(例如动态数组),那么它肯定不会工作。更好的避免是真的,但我们被告知它们是数组,不是指针。
memcpy(C, A, 5 * sizeof(C[0]));
memcpy(C + 5, B, 3 * sizeof(C[0]));
void *copy(void * restrict dest, const void * restrict src, const void * restrict src1, const size_t len1, const size_t len2, const size_t elemsize)
{
unsigned char *restrict ucdest = dest;
if(dest && src && src1)
{
memcpy(ucdest, src, elemsize * len1);
memcpy(ucdest + elemsize * len1, src1, elemsize * len2);
}
return dest;
}