쩝...솔직히 제가 뭘 써놨는지 ...
제가 말씀드리려던건
int a=100; -> 메모리의 어떤 위치에 100 이 저장됨.
int*b=(int*)100; -> 메모리의 어떤 위치에 100 이 저장됨.
int**c=(int**)100; -> 메모리의 어떤 위치에 100 이 저장된다...라는걸 말씀드릴려는거였습니다.
***가 몇게 붙더라도요.
근데 이게 무슨 의미가 있는지 물으신다면 ..그냥 그렇다는거죠..
int**c=(int**)100 이런건 실제로 사용될일은 없을테니까요.
확인해볼려면
AnisString s;
int *a=(int*)malloc(20);
Memo1->Lines->Add(s.sprintf("%p",a));
이렇게 사용가능한 주소를 알아내서...
int a=0xC94914; 0xC94914->위에서 알아낸 사용가능한 번지 a 의번지값
int*b=(int*)0xC94914;
int**c=(int**)0xC94914;
int***d=(int***)0xC94914;
Memo1->Lines->Add(s.sprintf("a의값=%x,a의번지%p",a,&a));
Memo1->Lines->Add(s.sprintf("b의값=%x,b의번지%p",*(&b),&b));
Memo1->Lines->Add(s.sprintf("c의값=%x,c의번지%p",*((int*)&c),(int*)&c));
Memo1->Lines->Add(s.sprintf("d의값=%x,d의번지%p",*((int*)&d),(int*)&d));
그리고 printf("%p",d); 는
printf("%p",&d); 가 맞는거 같습니다.(항상헛갈려^^)
김인구.구야 님이 쓰신 글 :
:
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_qna&no=651
:
: 제가 얼마전에 썻던 글입니다.
: 태윤님이 말씀하신
:
: : int a=100;
: : int*b=(int*)100;
: : int**c=(int**)100;
: : int***d=(int***)100;
: :
: : 위와 같이 코딩 해보면 에러없이 모두 메모리상의 어떤 번지에 100 이라는 숫자가 저장되지요.
:
: 이부분을 그 당시에도 이해를 못하고 넘어갔었습니다.
: 나중에 생각하기를 변수가 아니니까 형변환이란 개념이 적용이 될수 없다고 생각하고
: 컴파일 에러가 안나는것은 컴파일러의 융통성이거나 정확하지 않거나 둘중 하나라고 넘기고 있습니다.
: 근데 태윤님이 이렇게 의미(제가 생각하는 의미와는 조금 다릅니다만)가 있다고 말씀하셔서 이래저래 해봤습니다만 잘 모르겠네요...
: 이부분을 어떻게 확인해봐야할지...
:
:
: : int e;
: : e=(int)&d;
: : printf("%d",e); 나 printf("%p",d);
: 이부분은 참 흥미롭습니다.
: 이부분도 찍어보고 확인해보고 싶은데 잘 안되네요...
:
: 예제를 좀 주셨으면 좋겠습니다.