변수값바꾸기 ..이상하네요.
글쓴이: zxcvbnm / 작성시간: 목, 2003/12/11 - 10:20오전
이게 왜 안바뀌죠..
#include <stdio.h>
void revertvalue(int *i, int *j)
{
int *tmp;
tmp=i;
i=j;
j=tmp;
}
void main()
{
int i,j;
i=10;
j=20;
printf("before i=%d , j=%d\n", i, j);
revertvalue(&i,&j);
printf("after i=%d , j=%d\n", i, j);
}
결과
before i=10 , j=20
after i=10 , j=20
Forums:
Re: 변수값바꾸기 ..이상하네요.
사소한 실수를 하신 것으로 보입니다.
다음과 같이 수정하시면 원하시는 대로 될 것 같습니다.
이렇게 하셔도 될 것 같구요
그런데 원하시는 것이 변수의 주소를 바꿔치기 하여 값이 바뀐 것처럼 보이도록하는 것이라면 revertvalue()의 선언은 원래 사용하시던 것이 맞고 main()내 i, j에 대한 선언이 달라져야 할 것입니다.
To be a rich
[code:1]void main() {
miain에 선언한 처음의 int 형의 두 변수는 지역변수 이므로 콜바이 레퍼런스로 전달하였다 하여도 외부에서 포인터 자제를 바뀔 수 없을 것입니다.
코드를 이렇게 바꾼다면 님이 의도한 데로 잘 될것입니다.(테스트는 안해봤어용~)
-----------------------------------
오.. 이거 테스트 해보니까 제가 잠시 착각했다는 걸 깨달았습니다.
이렇게 해봤자 어차피 retvertValue() 에서는 포인터 스왑 자체가 지역변수놀이가
되어버려서 바뀐게 적용이 안되는 거네요.
실수!~
위의 코드는 잘못된 코드 입니다.
Re: 변수값바꾸기 ..이상하네요.
위의 코드는 잘못됐습니다.. 사용하지 마시길..
위 처럼만 사용하시길...
--------------------------
Donghyun Jung
댓글 달기