memcpy的三维数组

时间:2014-10-30 22:19:06

标签: c arrays

我们可以使用memcpy以非常干净的方式将整个3d数组内容复制到另一个3d数组中。我想知道是否有更简洁的方法将3d数组的少量内容复制到另一个中。

void function()
{
    uint32_t array1[2][2][2];
    uint32_t array2[2][2][2];
    //memset both the arrays to 0 first;
    memset(&array1,0,sizeof(array1));
    memset(&array2,0,sizeof(array2));

    array1[0][1][1]= 4;
    array1[0][0][0]=6;
    //memcpy(&array2,&array1,sizeof(array1)); 

    memcpy(&array2[0][1][1],&array1[0][1][1],sizeof(array1[0][1][1])); //this works, but if there is a cleaner way?
    printf_all("value of array1 %d and array2 %d \n",array1[0][1][1],array2[0][1][1]);
}

1 个答案:

答案 0 :(得分:5)

memcpy( &array2[0][1][1],
        &array1[0][1][1],
        sizeof(array1[0][1][1]) ) ; 

与直接元素分配相同:

array2[0][1][1] = array1[0][1][1] ;

使用memcpy()进行单个元素分配有点过于复杂,可能效率较低。例如,如果复制整个子数组,例如:

,则更有意义
memcpy( &array2[0][1],
        &array1[0][1],
        sizeof(array2[0][1]) ) ;

请注意,对于memcpy()的第三个参数,使用目标的大小而不是更安全 - 以防目的地是小。