인프런 커뮤니티 질문&답변

양원석님의 프로필 이미지
양원석

작성한 질문수

C 프로그래밍 - 입문부터 게임 개발까지

Swap

포인터는 어렵네요 ㅜㅜ

작성

·

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 의 주소는 정수형 변수가 아닌 포인터형 변수로 받아야 합니다.

감사합니다.

양원석님의 프로필 이미지
양원석

작성한 질문수

질문하기