[완료]초간단 C 퍼즐..그러나 이상한...
글쓴이: burnoutband / 작성시간: 금, 2008/10/17 - 10:44오전
안녕하세요. 맨날 눈팅만하다가 엄청간단한 코드의 결과값이 예상과 달라서 이렇게 글을 올려봅니다.
#include <stdio.h> int read (int *ip) { scanf("%d", ip); printf("ip = [%d %p], *ip = [%d]\n", ip, ip, *ip); return *ip; } int main (void) { int val = 2, ch = 3; printf("val = [%d], ch = [%d]\n", val, ch); printf("val = [%p], ch = [%p]\n", &val, &ch); printf("read(&val) = [%d], read(&ch) = [%d]\n", read(&val), read(&ch)); printf("last >>>>>> val = [%d], ch = [%d]\n", val, ch); }
예상결과가 뒤바뀌어서 나옵니다. 중간에 read함수 실행할때 7과 8입력했습니다. val의 메모리주소는 0xbff40ccc. ch의 메모리주소는 0xbff40cc8였습니다.
허나, printf("read(&val) = [%d], read(&ch) = [%d]\n", read(&val), read(&ch)); 명령을 수행할때, var의 주소를 넘겨서 read를 호출했는데, 실제로 read()에서 출력된 주소는 ch의 주소였습니다. 상식적으로 이해가 안되서 이렇게 질문합니다.
제가 어떤부분을 놓치고 있나요??
Forums:
조금 착각을 하신거
조금 착각을 하신거 같은신데요,
printf("read(&val) = [%d], read(&ch) = [%d]\n", read(&val), read(&ch));
요기서 처음으로 불려지는건
read (&val)이 아닌,
read (&ch)가 불려지게 됩니다.
감사합니다.
답변해주셔서 감사합니다.
찾아보니 저랑 비슷한 질문을 하신 분이 이미 계셨네요
http://kldp.org/node/96259
즐프..-_-;;
댓글 달기