2014-10-30 3 views
1

매우 깨끗한 방법으로 memcpy를 사용하여 전체 3d 배열 내용을 다른 3d 배열로 복사 할 수 있습니다. 3d 배열의 내용을 거의 복사하지 않는 깨끗한 방법이 있는지 알고 싶었습니다.3 차원 배열의 memcpy

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

이것은 실제로 작동해야합니다 : memcpy (array2, array1, sizeof (array1)); 그리고 깨끗하고 컴팩트합니다. –

+1

Btw, memset 대신에 "= {0}"을 0으로 사용하고 싶을 수도 있습니다. –

+0

단일 요소의 경우 간단한 할당은 나중에 누군가가 코드를 읽을 때 쉽게 이해할 수 있습니다. 마지막 인덱스를 두 번 이상 증분하는 블록을 복사하는 것은 배열이 메모리에서 어떻게 배치되는지를 알아야하기 때문에 위험합니다. –

답변

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

직접 요소 할당과 같은 달성합니다 :

는 단일 요소 할당에 대한 memcpy()를 사용하려면 다소 과도하게 복잡하고 가능성이 덜 효율적. 예를 들어 당신이 전체 하위 배열을 복사한다면 그것은 더 의미 예 : memcpy()의 세 번째 인수에 대해 오히려 대상하여 소스의 크기를 사용하는 것이 안전 것을

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

주 - 목적지가 더 작은 경우를 대비해서.