본문 바로가기
Programming/C++

[c] Call By Value, Reference

by OKOK 2017. 5. 14.

#include<stdio.h>


void swap(int a, int b);

int main(void)

{

int val1 = 10;

int val2 = 20;


swap(val1, val2);

printf("val1: %d\n", val1);

printf("val2: %d\n", val2);

return 0;

}


void swap(int a, int b)

{

int temp = a;

a = b;

b = temp;

printf("a : %d\n", a);

printf("b : %d\n", b);

1. 단순하게 값만 복사하고 연결이 끊어지는 것을 의미한다. Reference 와 차이를 설명하기 위해

2. Swap 함수에 대한 이해

3. 이것 몇 번 째 작성인지는 모르겠다. 이제 마지막.


#include<stdio.h>


void adder(int* pVal);


int main(void)

{

int val = 10;

int val2[3] = { 0,5,10 };

adder(&val);

printf("val2:%d\n", val2[0]);

adder(val2);

printf("val:%d\n", val);

printf("val2:%d\n", val2[0]);

return 0;

}


void adder(int* pVal)

{

(*pVal)++;

}

1. 헷갈렸던 부분 (*pVal)++ 이랑 *(pVal++) 이 것 둘의 차이

2.  전자의 경우 값을 +1 그러니 자연수 1을 더하라는 것이고 후자의 경우는 해당 자료형 바이트 이동 후 값을 의미한다. 그러므로 정독의 필요성과 선행 연산자의 차이를 구분 짓는 괄호의 차이를 알고 있으면 좋겠다.


#include<stdio.h>


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


int main(void)

{

int val1 = 10;

int val2 = 20;


printf("Before val1 : %d\n", val1);

printf("Before val2 : %d\n", val2);


swap(&val1, &val2);


printf("After val1: %d\n", val1);

printf("After val2: %d\n", val2);

return 0;

}


void swap(int*a, int*b)

{

int temp = *a;

*a = *b;

*b = temp;

}


1. Reference 로 호출하면 하나의 함수에서 변경이 다른 함수에서도 변경이 된다. 그 이유는 유일한 메모리 주소를 이용해서 값을 변경을 했기 때문이다.

2. 즉, 주소값을 활용하여 그 주소값의 데이터 값을 변경하는 것이다.

3. 단순히 값 복사가 아니라, 주소값에서 변경을 요구하므로 전체 메모리를 생각해야 한다.