<div>개강 시즌을 맡이해 깨작깨작 하는 포인터 설명 시리즈입니다.</div> <div><br /></div> <div>1.정의 : 어떤 값이 저장된 곳의 [주소]를 가지고 있는 변수(메모리 공간) 입니다.</div> <div><br /></div> <div>여기서 주소의 타입은 unsigned int 입니다. 무슨말인가 하면 우리가 쓰는 집주소는 한글로 되어있지만(예: 서울시 콩구 콩동 2222-22) 컴퓨터에서 주소는 보통 숫자로 되어있습니다. (예:12355123)</div> <div><br /></div> <div>2.왜 쓰는가?</div> <div><br /></div> <div>예로 들어보지요. </div> <div><br /></div> <div>공대생답게 지적인 외모에, 깔끔한 옷차림, 프로그래머답게 셜록 뺨때리를 후려갈기는 추리능력에 다년간의 연애 시뮬레이션으로 단련한 매너와 기품이 배어나오며 당장이라도 P=NP문제의 증명과 내비어-스톡스 방정식의 해법을 칠판에 휘갈겨 증명할듯한 오라를 풍기는 당신은 학교 퀸에게 고백을 받아 사귀던 도중 생일을 맞이하게 됩니다. </div> <div><span style="font-size: 9pt; line-height: 1.5">박보영을 닮은 청초한 외모에 당신만 바라보는 순정파인 여자친구는 생일 선물로 이번 "디x블로3 : 똥을 치우는 자" 의 한정판을 구해 당신에게 주려 합니다. 하지만 과제의 압박에서 벗어나지 못하는 당신은 여자친구에게 자취방에다가 가져다 놔 줘 라고 부탁합니다. </span></div> <div>이때 당신은 여자친구를 자기 집으로 어떻게 안내할까요?</div> <div><br /></div> <div>1) 집 주소를 알려준다.</div> <div>2) 집건물 "때어서" 안에 있는 가구며 컴퓨터며 설거지를 못해 널린 접시들 까지 싸그리 "복사"해서 여자친구앞에 가져다 준다. </div> <div><br /></div> <div>1) 번에 비해 2) 번은 많은 문제가 있습니다. </div> <div>첫째로 번거롭지요. 일단 집을 통채로 복사해서 넘겨주는거 자체가 엄청난 스케일이고 복잡하고 실제로 가능할지 여부는 그렇다고 쳐도 노력대비 얻는게 없습니다. </div> <div>둘째로 어떻게든 복사를 해서 가져다 여자친구에게 집의 복사본을 줬다고 해도 디아블로3 한정판은 여러분의 집에 없습니다. 왜? 복사된 집에 있을태니까요. </div> <div>셋째로 당신이 이사를 했습니다. 다음번엔 다시 다른 집을 복사해서 줘야 합니다. 1)번을 따른다면 그냥 변경된 주소만 주면 되지요.</div> <div><br /></div> <div>1)번이 여러모로 이점이 많은걸 알 수 있습니다. </div> <div><br /></div> <div>물론 대상이 집채만큼 커다란게 아니고 메모라던지 작은 글귀 정도라면 메모의 위치를 주기보단 그냥 복사해서 주는게 더 빠르겠죠.(있다 설명하겠지만 int, dobule ,char 등의 primitve 타입을 말하는겁니다.) 하지만 메모들이 많이 모인 책 정도만 되도 복사해서 주기보단 그 위치를 주는게 더 빠릅니다.</div> <div><span style="font-size: 9pt; line-height: 1.5">그밖의 여러 장점은 차차 설명하겠습니다. </span></div> <div>물론 단점도요.</div> <div><br /></div> <div><span style="font-size: 9pt; line-height: 1.5">자 이제 여러분이 오유인임을 자각하고 KICK을 해서 현실로 돌아와서..(</span><span style="color: #444444; font-family: 돋움, Dotum, AppleGothic, sans-serif; line-height: 20px; font-size: 9pt">Non, Rien de rien , </span><span style="color: #444444; font-family: 돋움, Dotum, AppleGothic, sans-serif; line-height: 20px; font-size: 9pt">Non, Je ne regrette rien~)</span></div> <div><br /></div> <div><br /></div> <div>3.어떻게 쓰는가?</div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5">여러분이 </span></div> <div>int x=5; </div> <div>라고 적고 컴파일을 하고 실행을 하면 컴퓨터는 int의 크기 만큼의 공간을 메모리에 만듭니다. 그리고 그 메모리 공간 안에 5라는 값을 넣어두지요. </div> <div>*int의 크기는 운영체제에 따라 다릅니다. 16비트 운영체ㅔ에선 16bits, 32bit 와 64bit에서는 32bits 입니다.</div> <div>그리고 그 공간은 주소를 부여받게 되죠. 여러분이 사는 집주소 처럼요. 편의상 @1234 라고 합시다.(@는 주소라는 의미. at이라는 뜻이죠) </div> <div><br /></div> <div>여담으로 여기서 왜 32비트 운영체제는 4GB의 메모리 이상을 사용할 수 없는지의 이유가 나옵니다. 32비트 체제에서는</div> <div>그 주소는 32비트 단위로 사용되며 결국 2^32*byte=4gb 까지밖에 주소가 나오질 않습니다. 그래서 4gb넘어도 주소로 쓸공간이 모잘라서 쓰질 못하는겁니다. 반대로 64비트는 그만큼 주소를 더 내놓을수 있기에 더 많은 메모리를 쓸 수 있게 됩니다.</div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div><span style="font-size: 9pt; line-height: 1.5">아무튼 여러분은 이제 그 주소를 통해 마음것 메모리 공간을 조정할 수 있습니다. 주소를 사용해 보지요.</span></div> <div><br /></div> <div>int* pX= &x; </div> <div><br /></div> <div>다음 문장엔 많은 의미가 있습니다. 차근차근 살펴보죠.</div> <div><br /></div> <div>int* : *가 붙으면 별 붙어서 승급했다는게 아니고 그 타입의 포인터 형이라는 뜻입니다. int도 타입이고 dobule도 타입인거처럼 int*도 타입입니다. 바꿔말함 그 타입의 메모리 공간의 주소를 값으로 가지고 있다는 겁니다. 위에서 케이스에서 @1234 를 가지고 있겠죠?</div> <div><br /></div> <div>pX : 포인터 타입도 변수이므로 변수명을 준겁니다.p는 포인터의 약자입니다. </div> <div><br /></div> <div>= : 대입연산자. 끗(equal이 아닙니다? == 요거랑은 달라요)</div> <div><br /></div> <div>& : 뒤에 오는 놈의 주소를 알아내는 연산자입니다. 여기선 뒤에 x가 오니깐 x 라는 변수의 주소를 알아내라는 의미겠죠?</div> <div><br /></div> <div><br /></div> <div>위대한 한글로 풀어쓰면 </div> <div>"int형의 주소를 담을수 있는 int포인터 형식을 가진 이름이 pX이란애를 만들고 그 안에 x란 놈의 주소를 담아라."</div> <div>결국 pX안에는 x의 메모리 주소인 @1234 가 들어가게 되었습니다. </div> <div><br /></div> <div>자 다음편에는 이놈을 어떻게 써먹을지 더 고찰하겠습니다.</div> <div>(다음편 커버내용: call by value, call by reference, 포인터의 포인터 )</div> <div><br /></div> <div><br /></div> <div><br /></div> <div><br /></div> <div><br /></div> <div><br /></div> <div><br /></div> <div><br /></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.