혹시 질문이나 답변 잘해주는 C/C++ 사이트 아시는 분 답변 좀 부탁드립니다.
제가 아는 사이트들은 답변 속도가 느리거나 답변 같은 것보다는 자료 중심이라서...
이거 공부하다 보면 의문 투성인 것들이 나오게 되네요.
이 곳에서 계속 물어보는 것도 좀 뻘쭘하고...
int main()
{
int a, b, c;
a=5;
b=2;
c=a;
a=b;
b=c;
printf("%d %dn", b, a);
return 0;
}
실행 결과 5 2
#include <stdio.h>
void goodswap(int* a, int* b);
void badswap(int a, int b);
int main(int argc, char* argv[])
{
int a, b;
a=123;
b=456;
printf("교환전 : a = %d, b=%dn", a, b);
goodswap(&a, &b);
printf("교환후 : a=%d, b=%dn", a, b);
a=123;
b=456;
printf("교환전 : a = %d, b=%dn", a, b);
badswap(a, b);
printf("교환후 : a= %d, b=%dn", a, b);
return 0;
}
void goodswap(int* a, int* b)
{
int tmp;
tmp= *a;
*a=*b;
*b=tmp;
return;
}
void badswap(int a, int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
return;
}
이건 실행 해 보면 교환 전 a=123, b=456 교환 후 a=456, b=123
교환 전 a=123, b=456 교환 후 a=123, b=456
이란 결과가 나오는데 이 예제를 실어준 책의 설명에 의하면 함수로 전달하여 변수의 값을 교환하기 위해서는 변수에 대입되있는 값이
아닌 변수의 주소를 알려줘야 한다고 하는데, 위에 처음 것과 같이 생각해 볼때 왜 변수의 주소가 필요한지 모르겠네요... 아시는 분 답변 좀 부탁드립니다.
그러나 만약 주소를 넘겨줬다면 주소 역시 복사되어서 가지만, 가리키는 주소의 값은 같기 때문에 복사본을 쓰던 원본을 쓰던간에 주소가 가리키는 곳으로 찾아가면 같은 데이터를 만나 수정할 수 있습니다.
ps. 그리고 포인터 개념에서 많은 사람들이 착각하는 것 중에 하나가, 포인터를 넘겨줬을 때와 변수를 넘겨줬을 때 함수의 작용이 다르다고 생각하는 문제입니다.
그러나 실제로는 똑같이 '인자로 넘어온 변수를 복사하여 함수 내에서 사용한다' 라는 원칙대로만 작동합니다.