[C] memcpy()를 사용한 swap[C] memcpy()를 사용한 swap

Posted at 2015.02.13 15:30 | Posted in C



facebook에 글올리기



[C] memcpy()를 사용한 swap


swap 함수를 작성할 때는, 포인터로 인자를 넘겨야 한다.


값을 인자로 넘길 경우 원본을 복사한 사본이 넘어오므로, 원본에는 값이 변경되지 않기 때문이다.


보통 swap 함수는 아래와 같이 작성된다.


Colored By Color Scripter

void swap(int *a, int *b){
    int t;
    t = *a;
    *a = *b;
    *b = t;
}


위와 같은 방법으로 int 형의 데이터 a 와 b의 데이터를 swap 할 수 있다.


하지만 int 형 외에 다른 타입의 swap을 하기 위해 타입별로 swap 함수를 만드는 것은 비효율적이다.

이러한 경우에 인자를 void* 형으로 받고, 넘어오는 인자의 size 를 같이 넘겨준 후 memcpy()를 사용하여 swap을 하면 여러형의 변수에 사용할 수 있다.



 Colored By Color Scripter

#include <malloc.h>

void swap2(void *a, void *b, int n){
    
    void *t;
    t = malloc(n);
    memcpy(t, a, n);
    memcpy(a, b, n);
    memcpy(b, t, n);
    free(t);
}


* memcpy(void* a, void* b, int n) : 포인터 b가 가리키는 데이터에서 n 크기만큼을 포인터 a가 가리키는 값에 복사한다.



Main 함수


Colored By Color Scripter

#include <stdio.h>
    
void main(void){

    int x = 10, y = 20;
    
    printf("Initial val - x : %d, y : %d \n", x, y);
    swap(&x, &y);
    printf("After swap val - x : %d, y : %d \n", x, y);

    swap2(&x, &y, sizeof(int));
    printf("After swap2 val - x : %d, y : %d \n", x, y);

    return 0;
}



이웃추가
facebook에 글올리기

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기