2020. 4. 19.

[c] 인프런 48. swap 강의 정리


값을 서로 바꾸는 것을 출력하면서 주소값에 대한 정보를 확인


#include<stdio.h>

void swap(int a, int b);
void swap_addr(int * a, int * b);

int main(void)
{
// SWAP
int a = 10;
int b = 20;
printf("a의 주소 : %d\n", &a);
printf("b의 주소 : %d\n", &b);

// a b 의 값을 바꾼다.
printf("swap 함수 전 => a: %d, b : %d\n", a, b);
swap(a, b);
printf("swap 함수 후 => a: %d, b : %d\n", a, b);

// 값에 의한 복사 (Call by Value) -> 값만 복사한다는 의미

//주소값을 넘기면? 메모리 공간에 있는 주소값 자체를 넘기면.. 철수네처럼

printf("(주소값 전달)swap 함수 전 => a: %d, b : %d\n", a, b);
swap_addr(&a, &b);
printf("(주소값 전달)swap 함수 후 => a: %d, b : %d\n", a, b);
return 0;
}

void swap(int a, int b)
{
printf("(swap 함수내) a의 주소 : %d\n", &a);
printf("(swap 함수내) b의 주소 : %d\n", &b);
int temp = a;
a = b;
b = temp;
printf("swap 함수 내 => a: %d, b : %d\n", a, b);

}
void swap_addr(int * a, int * b)
{
int temp = *a;
*a = *b;
*b = temp;
printf("swap 함수 내 => a: %d, b : %d\n", *a, *b);

}


a b temp 넣엇다가 덮어씌우면 주소값이 바뀌는데
그것은 새로운 저장공간에 넣엇다는 것을 이야기한다.
주소을 찾아서 복사를 하면 스왑함수가 끝난 뒤에도 유지가 된다.


댓글 없음:

댓글 쓰기