작성
·
259
0
'''void swapaddr(int a, int b){
int temp = *a;
a = b;
b = &temp;
}''' 로 했을때는 왜 복사가 일어나지 않는지 설명해주실 수 있나요?
또 질문드릴 점은 포인터 변수a 에서 a 는 가지고 잇는 값이고, a는 주소값, &a는 a의 주소가 저장된 주소값인가요?
좋은 강의 너무나도 감사합니다 ㅎㅎ
답변 2
0
0
안녕하세요 나도코딩입니다. 질문글 중에서 코드 중에 별표가 빠졌나요? 인프런에서 글 입력시 누락되는 현상이 있어서, 의도하신 코드 그대로 적혔는지 모르겠네요 ^^;
두번째 질문 먼저 답변드리면, (이후 별표시는 한글로 "별"이라 적을게요)
int b = 10; // 주소 1001 에 저장된다고 가정
int 별a = &b; // 주소 2001 에 저장된다고 가정
이 상황에서
a 는 b 변수의 주소, 1001 입니다
별a 는 b 변수의 주소에 있는 값, 10 입니다.
&a 는 a 포인터 변수의 주소, 2001 입니다.
첫번째 질문은,
int a, int b 를 전달값으로 받는 경우 "값" 을 그대로 복사하여 a, b 라는 새로운 변수에 저장하게 됩니다. 즉 swapaddr 함수를 호출할때 던져주는 변수의 값을 바꾸는게 아니고, swapaddr 함수를 호출할때 새로 만들어지는 a, b 값을 바꾸게 됩니다. 그래서 함수 안에서는 바뀐것처럼 출력이 되어도 실제로 사용자가 원하는 변수의 값을 바꾼건 아니게 됩니다. 더불어 코드상에서 정수형 변수 b 에 temp 의 주소를 넣으려고 시도하는데, temp 의 주소는 정수형 변수가 아닌 포인터형 변수로 받아야 합니다.
감사합니다.