#include <stdio.h>
int main() {
int *p = NULL;
int num = 15;
p = #
printf("int 변수 num의 주소 : %d \n", &num);
printf("포인터 p의 값: %d \n", p);
printf("포인터 p가 가리키는 값: %d \n", *p);
return 0;
}
출력 결과)
int 변수 num의 주소 : 1870753276
-&num
포인터 p의 값: 1870753276
-p
포인터 p가 가리키는 값: 15
-*p
call by value
: 값에 의한 호출
call by reference
: 참조에 의한 호출
변수의 주소(참조)
call by value(값에 의한 호출): 인자로 받은 값 복사하여 처리 -> 복사하기 때문에 메모리량 증가, 과부하 But 원래 값은 영향을 받지 않아서 안전
call by reference(찹조에 의한 호출): 인자로 받은 값의 주소를 참조하여 직접 값에 영향
예시
#include <stdio.h>
void swap(int num1, int num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
void main() {
int a = 20, b = 60;
swap(a, b);
printf("a: %d, b: %d", a, b);
}
출력 결과)
a: 20, b: 60%
swap(a,b)
: 함수 내부에서만 a, b 변경 But a,b에게 전달하지는 못함
#include <stdio.h>
void swap(int x, int y){
int temp;
temp = x;
x = y;
y = temp;
return ;
}
void swap(int x, int y );
int main() {
int a = 10;
int b = 20;
printf("swap 전 a: %d\n", a);
printf("swap 전 b: %d\n", b);
swap(a, b);
printf("swap 후 a: %d\n", a);
printf("swap 후 b: %d\n", b);
return 0;
}
출력 결과)
swap 전 a: 10
swap 전 b: 20
swap 후 a: 10
swap 후 b: 20
실제 값이 바뀌지 않는다.
#include <stdio.h>
void swap(int *num1, int *num2) {
int temp = *num1;
*num1 = *num2 ;
*num2 = temp ;
}
int main() {
int a = 20, b = 60;
swap(&a, &b); // 주소를 전달하여 변수의 값 교환
printf("a: %d, b: %d", a, b);
return 0;
}
출력 결과)
a: 60, b: 20%
#include <stdio.h>
void swap(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp;
return;
}
void swap (int *x, int *y);
int main() {
int a =10 ;
int b= 20;
printf("swap 전 a: %d\n", a);
printf("swap 전 b: %d\n", b);
swap(&a, &b);
printf("swap 후 a: %d\n", a);
printf("swap 후 b: %d\n", b);
return 0;
}
출력 결과)
swap 전 a: 10
swap 전 b: 20
swap 후 a: 20
swap 후 b: 10
*x = *y
: 포인터를 통해 주소에 위치한 값 교환
*x
: 포인터 x가 가리키는 메모리 주소에 저장된 값
*y
: 포인터 y가 가리키는 메모리 주소에 저장된 값
=> 변수들의 값 교환