포인터 이해(1)
글쓴이: rgbi3307 / 작성시간: 목, 2009/06/11 - 4:04오후
#include /stdio.h/
int main (void)
{
int a;
int *b;
int **c;
int ***d;
b = &a;
c = &b;
d = &c;
a = 1;
*b = 2;
**c = 3;
***d = 4;
printf ("a=%d, *b=%d, **c=%d, ***d=%d\n", a, *b, **c, ***d);
return 0;
}
printf() 함수의 출력은 어떻게 될까요?
From:
*알지비 (메신저: rgbi3307(at)nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.kr/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
Forums:
**c = *(*(c)) 인가요? c =
**c = *(*(c)) 인가요?
c = &b 이면?
*c는 b를 가리키고?
*c의 값은 b주소에 있는 값?
*(*c)는 b의 값에 대응 하는 주소를 가리키는건가요?
앍 어려워 ㅠㅠ 좀더 공부해야 할듯요 ㅎㅎ..뭐 하나 확신이 드는게 없네요.
* 의 우선 순위가 오른쪽 이므로 **c = *(*c)) 가 맞을 것 같네요
* 의 우선 순위가 오른쪽 이므로 **c = *(*c) 가 맞을 것 같네요
--------------------------------------
2b or not 2b, that is the question
모두 4가 출력되지
모두 4가 출력되지 않나요?
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
네... 실행해 보면 아시겠지만,
모두 4가 출력이 됩니다.
포인터 개념이 자꾸 헤갈려서, 제가 직접 코딩해 본 것입니다.
왜 모두 4가 출력이 되는지, 설명을 할려니, 또 머리에 쥐가 나는군요(^^).
그래서 요즘은, 포인터에 포인터에 포인터... 이런것들은 아예 그림을 그려서 이해합니다.
온라인 특성상, 그림을 그려드릴 수는 없고, 다만, 포인터에서 중요한 개념은
&은 주소연산자(주소 가져옴)
*은 주소참조연산자(주소안의 내용을 가져옴) 입니다.
*은 주소안의 내용을 가져옴.(주소참조1개)
**은 주소의 주소안의 내용을 가져옴.(주소참조2개)
***은 주소의 주소의 주소안의 내용을 가져옴.(주소참조3개)
****은 주소의 주소의 주소의 주소안의 내용을 가져옴(주소참조4개)
*****은 ...
결론은, *가 붙은 개수만큼 주소참조가 이루어 진다는...
From:
*알지비 (메신저: rgbi3307(at)nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.kr/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
자기자랑일 수도
자기자랑일 수도 있지만 과거에 저는 포인터에 대해 딱 한번만에 책을 보고 이해했답니다.
나중에 후배들에게 책에 있는 그대로 포인터를 설명해주는데 아무도 못알아듣더군요.
그제서야 제 머리 어딘가가 다른 사람과 심각할 정도로 다르다는 걸 깨달았습니다.
그런데 그 다른 부분이 좋은 쪽이 아니라 나쁜 쪽인 것 같습니다.
애초부터 제 머리는 정상적인 사고를 하는 두뇌가 아니라 폰 노이만 기계로 뉴런이 연결되어 있었던 것이죠.
나중에 함수형 언어를 접하고 납득하기까지 5년은 훨씬 넘게 걸렸던 것은, SECD머신과 G-머신을 뉴런이 코딩하는데 걸린 시간이었을거라 생각합니다.
------------------------------
How many legs does a dog have?
------------------------------
How many legs does a dog have?
폰 노이만 기계로
폰 노이만 기계로 뉴런이 연결되어 있었던 것이죠.
공감하고 있습니다.
저는 C++ 처음 접할 때 상속과 가상 함수 개념을 이해하는 데 1년이 걸렸죠.
함수형 언어는... (한숨)
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
자신을 빠르게 이해하시는군요.
저는 그런 일 있을 때 눈치도 못채고 넘어간 경우가 많았습니다.
아름다운 2진수를 사랑하셨군요.
어느 책에서 본 적이 있는데, 기계어가 어려웠던 폰 노이만의 제자가 어셈블러를 만들어 쓰다가 들켰습니다.
스승왈, 이런 아름다운 2진수를 두고 그런 저급한 것을 왜 만들어 쓰냐고 화를 낸 적이 있다고 합니다.
그 분의 머리를 해부하면 CPU와 RAM이 나올려나.
그 이야기에 쩔다가
그 이야기에 쩔다가 갑니다. -_-켁
nil.
내가 아는 것과는 좀 다른데...
제가 아마 '행복한 프로그래밍'인가 '누워서 읽는 알고리즘'인가 거기서 읽었던 거와 표현이 좀 다르네요.
죄송합니다.
네트워크의 문제로 여러번 올리게 되었습니다.
바로 그 책입니다.
오랜 전에 읽어서 기억이 가물가물합니다만,
2진수를 사랑하셨다는 얘기는 맞습니다. 아마도.
죄송합니다.
네트워크의 문제로 여러번 올리게 되었습니다.
토요일 야근 중.
송구하옵니다.
삭제 기능이 없어서 잘못 올린 것을 지울 수가 없네요.
옆 동료가 소스 수정을 해야 실행화일을 만들고 등록을 할 수 있는데,
언제 끝나려나.
황송하옵니다.
기다리기 심심해서 올린 잘못된 댓글 수정을 못해서 이런 내용으로 대체합니다.
토요일에 남자 둘이서 넓은 사무실에 뭣하는 짓인지.휴-
내일은 쉴 수 있으려나.
저는 포인터와
주소를 같이 해석하고 있습니다.
즉, 포인터는 주소의 한글표현으로 이야기하고 있습니다.
포인터(==주소)를 잘 이해해 보고자, 이런 글을 올리게 되었구요.
(물론, KLDP에서 예전부터 많이 논의 되어 왔겠지만...)
아! 그리고, 주소와 데이터는 완전히 다른것입니다.
TTL 논리회로에서 주소와 데이터는 전류 흐름선이 따로 분리되어 있구요.
From:
*알지비 (메신저: rgbi3307(at)nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.kr/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))