[c] 배열의 복사와 이동

배열은 프로그래밍에서 자주 사용되는 데이터 구조 중 하나입니다. 배열을 복사하거나 이동하는 것은 매우 중요한 작업이며, 이를 올바르게 다루는 것은 프로그램의 성능과 안정성에 영향을 미칠 수 있습니다.

배열 복사

배열 복사는 기존 배열의 내용을 다른 배열로 복제하는 작업입니다. 이 때, 얕은 복사(shallow copy)깊은 복사(deep copy)의 두 가지 방법이 있습니다.

얕은 복사

int arr1[] = {1, 2, 3, 4, 5};
int arr2[5];

// 얕은 복사
memcpy(arr2, arr1, sizeof(arr1));

얕은 복사는 배열의 요소들을 다른 배열에 동일하게 복사합니다. 하지만 이 경우에는 포인터가 가리키는 데이터만 복사하므로, 원본 배열과 복사된 배열이 메모리를 공유하게 됩니다. 따라서 원본 배열이 변경되면 복사된 배열도 영향을 받을 수 있습니다.

깊은 복사

깊은 복사는 배열의 모든 내용을 복제하여 새로운 메모리 공간에 저장합니다.

int arr1[] = {1, 2, 3, 4, 5};
int* arr2 = malloc(sizeof(int) * 5);

// 깊은 복사
for (int i = 0; i < 5; i++) {
    arr2[i] = arr1[i];
}

깊은 복사는 배열의 각 요소를 직접 복사하여 메모리를 새로 할당하므로, 원본 배열과 복사된 배열은 완전히 독립적입니다.

배열 이동

배열 이동은 배열을 다른 위치로 이동시키는 작업을 말합니다. C 언어에서는 memmove 함수를 사용하여 배열을 이동할 수 있습니다.

int arr[] = {1, 2, 3, 4, 5};

// 배열을 오른쪽으로 2칸 이동
memmove(arr + 2, arr, 3 * sizeof(int));

배열 이동은 배열의 일부분을 다른 위치로 이동시키는 작업으로, 이를 통해 배열의 요소를 재배치하거나 필요에 따라 배열을 조작할 수 있습니다.

배열을 복사하고 이동시키는 작업은 프로그래밍에서 매우 일반적이며, 이러한 작업을 올바르게 다루는 것은 효율적이고 안정적인 프로그램을 작성하는 데 중요합니다.

배열 복사와 이동에 대한 기본적인 이해를 토대로 실제 프로그램을 작성할 때, 이러한 작업을 적절하게 다룰 수 있을 것입니다.

참고 자료