Arrays 创建一个包含其他数组元素的数组

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

假设我有两个数组,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
。下面我假设这些是
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;
}