<두 변수의 값을 바꾸는 알고리즘>
#include <stdio.h>
void main() {
int x = 10 , y = 20;
printf("x: %d, y:%d\n", x, y);
x = y;
y = x;
printf("x: %d, y:%d\n", x, y);
//이렇게 하면 내가 원하는 값의 교환이 이뤄지지 않는다, x값이 덮어 씌워 지기 때문
}
<결과>
<결과>
x: 10, y:20
x: 20, y:20
#include <stdio.h>
void main() {
int x = 10 , y = 20;
int temp;
printf("x: %d, y:%d\n", x, y);
temp = x;
x = y;
y = temp;
printf("x: %d, y:%d\n", x, y);
}
<결과>
x: 10, y:20
x: 20, y:10
<swap 함수 사용하기>
#include <stdio.h>
void swap(int, int);
void main() {
int x = 10 , y = 20; //main의 지역변수
int temp;
printf("x: %d, y:%d\n", x, y);
swap(x, y);
printf("main: x: %d, y:%d\n", x, y);
}
void swap(int x, int y) { //swap 매개변수
int temp;
temp = x;
x = y;
y = temp;
printf("swap( ) 실행!\n");
printf("swap: x: %d, y:%d\n", x, y);
}
<결과>
x: 10, y:20
swap( ) 실행!
swap: x: 20, y:10
main: x: 10, y:20
swap()을 실행하면, swap() 함수 내 x,y 값은 변경이 되어 있으나
실제 main 에서 생성된 x,y 값은 변경 되지 않는다
=> 함수의 호출이 call by value(값에 의한 호출) 이기 때문에
<변수를 사용하는 것과 포인터를 사용하는 것의 차이>
포인터 사용해서 매개변수를 만들면 입력한 변수에게 영향을 줄 수 있다
#include <stdio.h>
void swap(int*, int*);
void main() {
int x = 10 , y = 20;
int temp;
printf("x: %d, y:%d\n", x, y);
swap(&x, &y);
printf("main: x: %d, y:%d\n", x, y);
}
void swap(int *px, int *py) {
int temp;
temp = *px; //간접참조연산자로 주소에 접근
*px =*py;
*py = temp;
printf("swap( ) 실행!\n");
printf("swap: x: %d, y:%d\n", *px, *py);
}
<결과>
x: 10, y:20
swap( ) 실행!
swap: x: 20, y:10
main: x: 20, y:10
실제 main에서 생성된 값을 전달하기 위해
main 에서 생성된 변수 x,y의 주소값을 함수에 전달 한다
따라서 함수의 매개변수는 전달된 주소를 저장할 수 있는 포인터로 생성해야 한다
void swap(int*, int*); //swap 함수의 매개변수가 포인터로 만들어지고
&x, &y // 주소값이 해당 포인터에 전달 됨
swap(int *px, int *py) 내에서는 temp는 정수형 변수,
px와 py는 매개변수로 전달된 변수 x, y의 주소를 저장할 정수형 포인터이므로,
간접참조연산자(*) 를 사용해서 해당 주소에 접근해 값을 전달하고 저장해야 한다
이렇게 함수의 매개변수에 값을 저장할 때
값이 복사되어 전달 되면 Call By Value 방식 (값에 의한 호출)
변수의 주소가 전달되면 Call By Adress 방식 ( 주소에 의한 호출)
'Dev. > C++' 카테고리의 다른 글
배열과 포인터 종합문제 (0) | 2022.03.27 |
---|---|
포인터 배열과 배열 포인터 (0) | 2022.03.27 |
visual studio 디버깅 하기 (0) | 2022.03.26 |
포인터의 목적/메모리의 동적 할당 (0) | 2022.03.25 |
문자열 연습문제 (0) | 2022.03.23 |
댓글