Programming/C & C++

[c 언어] 포인터와 call by address : 실제 값에 영향 있는 경우와 없는 경우!

만나쓰 2021. 3. 27. 16:12

<case 1-1 : swap 안 되는 경우 == 실제 값 영향 X>

1. *a는 int형 정수 "aa = 1"을 참조, *b는 int형 정수 "bb = 2"를 참조

2. (&aa, &bb)로 주소를 매개변수로 전달 (1, 2의 주소 값)

3. 주소 값을 swap했지만 main에서 swap이 이루어지지 않음

 

 

-> 주소로 전달하고 주소 swap을 했지만, 복사된 인자들이 참조하는 주소를 swap해서 실제로 swap이 이루어지지 않음

 

 

 

 

<case 1-2 : swap이 이루어진 경우 == 실제 값 영향 O>

 

 

 

 

 

<case 2 : swap이 이루어 진 경우 == 실제 값 영향 O>

1. 문자열을 가리키는 *a, *b

2. 참조하는 문자열의 주소가 아닌, a, b의 주소를 매개변수로 전달

3. 복사된 새로운 *a, *b는 main에서의 a, b 주소가 가리키는 문자열 swap

4. 함수 종료 후 main 함수에서는 a, b가 가리키는 문자열이 swap 됨

 

 

 

 

 

<결론>

 

전달되는 매개변수는 값을 복사해서 쓰이기 때문에 새로운 변수임을 잊지 말아야 함! (이름은 같을 수 있음)

 

주소 값을 매개변수로 보내도 실제 참조하는 값에 어떻게 접근해서 수정이 일어나는 지에 따라 실제 값에 영향이 갈 수도, 가지 않을 수도 있다.

 

포인터는 더 주의해서 사용하자 ㅎㅎ