<img width="476" height="181" alt="" src="http://www.soen.kr/lecture/ccpp/cpp1/10-4-4.files/image004.gif"><div class="MsoNormal"><span lang="en-us">void *는 원래 임의의 타입을 모두 가리킬 수 있는 타입이다.</span></div> <div class="MsoNormal"><span lang="en-us">이 임의의 타입에는 포인터 타입도 당연히 포함되며 포인터 변수도 분명히 변수이므로 번지가 있고 이 번지를 void *의 변수가 가질 수 있는 것이다. </span></div> <div class="MsoNormal"><span lang="en-us">void *vp가 int *pi를 가리키고 있을 때 대상체를 읽고 싶다면 캐스트 연산자를 적절히 잘 사용해야 한다. </span></div> <div class="MsoNormal"><span lang="en-us">**(int **)vp 이렇게 되는데 vp를 int형 이중 포인터로 잠시 바꾼 후 *를 두 번 적용하면 pi가 가리키는 정수를 읽을 수 있다.</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us"></span> --------------------------------------------------------------------------</div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">재가 공부하는 사이트에서 이중void포인터에 대해서 설명하는 부분의 일부인데요</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">3번째줄을 보면</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">void *의 자료형 변수vp가 int * 자료형 변수vi를 가리킬때 vi가 가리키는 값을 vp를 통해서 얻고 싶으면</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">**(int **)vp</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">이렇게 해서 값을 얻어라고 되어 있습니다.</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">설명도 보면 그럴싸 하구요</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">vp가 가리키는 값이 가리키는 값을 얻기위해 **를 두번 적용한다.</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">그래서 재가 실습해보니</span></div> <div class="MsoNormal"><span lang="en-us"></span> </div><span lang="en-us"></span> <div style="border:1px solid rgb(0,0,128);color:rgb(0,0,0);font-family:Consolas, 'Courier New', Courier, Monospace;font-size:10pt;"><div style="background:rgb(0,0,128);padding:2px 5px;color:rgb(255,255,255);font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;">Code Snippet</div> <div style="background:rgb(12,12,12);color:rgb(220,220,220);overflow:auto;max-height:300px;"> <ol style="background:rgb(0,0,0);margin:0px 0px 0px 3em;padding:0px;" start="1"><li><span style="color:rgb(155,155,155);">#include</span><span style="color:rgb(214,157,133);"><stdio.h></span></li> <li style="background:rgb(12,12,12);"><span style="color:rgb(155,155,155);">#include</span><span style="color:rgb(214,157,133);"><stdlib.h></span></li> <li> </li> <li style="background:rgb(12,12,12);"><span style="color:rgb(86,156,214);">int</span> <span style="color:rgb(200,200,200);">main</span><span style="color:rgb(180,180,180);">(</span><span style="color:rgb(86,156,214);">void</span><span style="color:rgb(180,180,180);">)</span></li> <li>{</li> <li style="background:rgb(12,12,12);"> <span style="color:rgb(86,156,214);">void</span> <span style="color:rgb(180,180,180);">*</span><span style="color:rgb(200,200,200);">vp</span><span style="color:rgb(180,180,180);">;</span></li> <li> <span style="color:rgb(86,156,214);">int</span> <span style="color:rgb(180,180,180);">*</span><span style="color:rgb(200,200,200);">ip</span><span style="color:rgb(180,180,180);">=</span><span style="color:rgb(189,99,197);">NULL</span><span style="color:rgb(180,180,180);">;</span></li> <li style="background:rgb(12,12,12);"> <span style="color:rgb(200,200,200);">vp</span> <span style="color:rgb(180,180,180);">=</span> <span style="color:rgb(200,200,200);">ip</span><span style="color:rgb(180,180,180);">;</span></li> <li><span style="color:rgb(87,166,74);">// vp = &ip;</span></li> <li style="background:rgb(12,12,12);"> </li> <li> <span style="color:rgb(200,200,200);">vp</span> <span style="color:rgb(180,180,180);">=</span> <span style="color:rgb(200,200,200);">malloc</span><span style="color:rgb(180,180,180);">(</span><span style="color:rgb(86,156,214);">sizeof</span><span style="color:rgb(180,180,180);">(</span><span style="color:rgb(86,156,214);">int</span><span style="color:rgb(180,180,180);">));</span></li> <li style="background:rgb(12,12,12);"> <span style="color:rgb(180,180,180);">*(</span><span style="color:rgb(86,156,214);">int</span><span style="color:rgb(180,180,180);">*)</span><span style="color:rgb(200,200,200);">vp</span> <span style="color:rgb(180,180,180);">=</span> <span style="color:rgb(181,206,168);">5</span><span style="color:rgb(180,180,180);">;</span></li> <li><span style="color:rgb(87,166,74);">// **(int**)vp = 5;</span></li> <li></li> <li style="background:rgb(12,12,12);"> <span style="color:rgb(200,200,200);">printf</span><span style="color:rgb(180,180,180);">(</span><span style="color:rgb(214,157,133);">" %d \n"</span><span style="color:rgb(180,180,180);">,</span> <span style="color:rgb(180,180,180);">**(</span><span style="color:rgb(86,156,214);">int</span><span style="color:rgb(180,180,180);">**)</span><span style="color:rgb(200,200,200);">vp</span><span style="color:rgb(180,180,180);">);<span style="color:rgb(87,166,74);">// *(int*)vp는 정상출력 된다.</span></span></li> <li><span style="color:rgb(87,166,74);"></span></li> <li><span style="color:rgb(87,166,74);"></span></li> <li style="background:rgb(12,12,12);"> <span style="color:rgb(86,156,214);">return</span> <span style="color:rgb(181,206,168);">0</span><span style="color:rgb(180,180,180);">;</span></li> <li>}</li></ol></div></div> <div class="MsoNormal"></div> <div class="MsoNormal"> </div> <div class="MsoNormal"> </div> <div class="MsoNormal"> </div> <div class="MsoNormal"> </div> <div class="MsoNormal">대충 이런형태가 되는듯한데 컴파일하면 자꾸 15째 줄에서 에러가 납니다...</div> <div class="MsoNormal"> </div> <div class="MsoNormal">혹시나 vp가 한번에 ip가 가리키는 값을 포인트 하는게 아니라 ip의 주소를 포인트 하면 결과가 달라질까 싶어서</div> <div class="MsoNormal"> </div> <div class="MsoNormal">주석부분으로 바꾸어 컴파일해도 마찬가지네요...</div> <div class="MsoNormal"> </div> <div class="MsoNormal"> </div> <div class="MsoNormal"> </div> <div class="MsoNormal">그런데 **(int**)vp 이녀석을 *(int*)vp이렇게 바꾸면</div> <div class="MsoNormal"> </div> <div class="MsoNormal">ip가 가리키는 값인 5가 정상적으로 출력되구요</div> <div class="MsoNormal"> </div> <div class="MsoNormal"><span lang="en-us"></span> </div> <div class="MsoNormal"><span lang="en-us">재가 작성한 코드가 틀린건가요?? 아니면 설명이 틀린건가요??</span></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.