참조에 의한 값전달.
글쓴이: 하하 / 작성시간: 금, 2003/10/17 - 12:02오후
void a(char* test) { test = (char *)malloc(sizeof(char)); } main() { char *test=0x00; printf("1. %x \n", test); a(test); printf("2. %x \n", test); }
위 main에서 test를 a 함수로 주소값을 넘겼습니다
a 함수 수행 후...
main 복귀해서 test를 찍어보면 a에서 할당 받은
test의 주소가 안찍힙니다.
헐.. 이런.. 것도 몰라.. 생각없는넘 할거 같은데...
정말 안되는데.. 어떻게 생각하십니다.
linux , gcc 환경입니다...
즐거운 하루되세요....
Forums:
char *test의 주소값이 넘어가야 되니...[code:1]v
char *test의 주소값이 넘어가야 되니...
void a(char **test);
가 되어야 되지 않나요?
[url]http://bbs.kldp.org/viewtopic.php?t
http://bbs.kldp.org/viewtopic.php?t=24398&highlight=
윗분이 올려주신 링크에 여러 분들이 설명을 달아주시긴 했지만...기본
윗분이 올려주신 링크에 여러 분들이 설명을 달아주시긴 했지만...
기본적으로는 C가 Call by value이기 때문이라고 봅니다.
위의 프로그램에서도 프린트 되는 값은 100이 아니라 1입니다. 이유는 다 아실 것입니다. 포인터도 마찬가지입니다.
위에서 int 대신 포인터를 매개변수로 넘겨준다면 포인터가 가리키는 주소값을 Call by value로 넘겨주는 것 뿐이기 때문에 함수에서 아무리 malloc하고 해서 주소값을 바꿔도 함수 호출이 끝나면 malloc으로 받은 주소값은 날아가 버리는 것입니다. 함수 내부에서 만들어진(여기서는 malloc이 리턴한) 주소값도 stack에 저장되는 로컬 변수값이 되는 셈이니 함수 끝나면 사라지는 거죠.
주소값을 return 해주거나 맹고이님이 쓰신 것처럼 더블 포인터를 쓰는 방법, 그리고 -별로 권장하진 않지만- 전역변수로 해결하는 방법등으로 해야만 원하시는 작업이 가능할 것입니다.
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
C++ 방식대로라면 지저분한 2중포인터를 쓰느니void a(cha
C++ 방식대로라면 지저분한 2중포인터를 쓰느니
void a(char *& test);
가 좋을듯
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
Re: 참조에 의한 값전달.
API 실전 프로그램에서
가 나왔는데.. 책 오타인줄 알고..
그냥 포인터로 바꾸어서 했는데..
이것때문에 프로그램에 이상이 생겨.. 2.3시간동안 고생한 생각이 나네요..
C언어니깐. 이중 포인터로 하면 해결 되겠죠...
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
댓글 달기