memcpy的三维数组

use*_*000 1 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]);
}
Run Code Online (Sandbox Code Playgroud)

Cli*_*ord 5

memcpy( &array2[0][1][1],
        &array1[0][1][1],
        sizeof(array1[0][1][1]) ) ; 
Run Code Online (Sandbox Code Playgroud)

实现与直接元素分配相同:

array2[0][1][1] = array1[0][1][1] ;
Run Code Online (Sandbox Code Playgroud)

要使用memcpy()单元素赋值是有点过度复杂,可能效率较低.例如,如果您正在复制整个子数组,则更有意义,例如:

memcpy( &array2[0][1],
        &array1[0][1],
        sizeof(array2[0][1]) ) ;
Run Code Online (Sandbox Code Playgroud)

请注意,使用目标的大小而不是第三个参数的更安全memcpy()- 只是在目标较小的情况下.