공부한지 한참되었는데도 <div><br></div> <div>개념부터 매번 흔들흔들 답답하네요....</div> <div><br></div> <div>질문 하나 드리고싶습니다.</div> <div><br></div> <div>일단 저는 main문에서 선언된 2차원 배열을 더블 포인터로 받아서 참조를 하고싶어 실험을 하였습니다.</div> <div><br></div> <div>예를들면</div> <div>int mat[3][3] = { 1,2,3,4,5,6,7,8,9 };</div> <div>int **ptr_mat;</div> <div><br></div> <div>ptr_mat = mat;</div> <div><br></div> <div>물론 이것은 mat가 int (*)[3]형 변수이다 보니까 컴파일 오류가 나더군요... 그래서 캐스팅을 하여 넣었습니다.</div> <div>따라서 </div> <div>ptr_mat = (int**) mat;</div> <div>이렇게 되겠고 출력을 하였습니다.</div> <div>for(int i = 0; i < 3; i++) {</div> <div>for (int j = 0 ; j < 3; j++) {</div> <div>printf("%d", ptr_mat[i][j]);</div> <div>}}</div> <div><br></div> <div>결과는 물론 잘나오더군요..</div> <div><br></div> <div>이제 한발자국 더나아갑니다.</div> <div><br></div> <div><br></div> <div>그럼 이런식으로 캐스팅한 2중 포인터로 다른 함수로 쏴서 보내주어보는 실험을 합니다.</div> <div>여기서부터는 일일이 설명드리기 힘드니 코드를 전부 붙여넣겠습니다.</div> <div><br></div> <div><div>#include < stdio.h></div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">void aa(int **p)</span></div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d", **p);</div> <div>}</div> <div><br></div> <div>void main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int a[2][2] = { 1, 2, 3, 5 };</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int**ptr_a;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span><span style="font-size:9pt;line-height:1.5;">aa((int **)a);</span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div>}</div></div> <div><br></div> <div><br></div> <div>하지만 이렇게 이중 포인터로 다른 함수로 쏴준 경우엔 컴파일은 되지만 실행이 되지 않습니다.</div> <div><br></div> <div>사실 어떤것이 맞는 답인지는 알고있습니다.</div> <div><div>#include < stdio.h></div> <div><br></div> <div><br></div> <div>void aa(int (*p)[2])</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d", **p);</div> <div>}</div> <div><br></div> <div><br></div> <div><br></div> <div>void main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int a[2][2] = { 1, 2, 3, 5 };</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int (*ptr_a)[2];<span class="Apple-tab-span" style="font-size:9pt;line-height:1.5;white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>aa(a);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div>}</div></div> <div>이런식이 되겠지요....첫번째 경우에서 캐스팅후에 함수가 넘겨 받는 값도 &a[0]일테고 올바른경우에서 함수 aa 의 인자 a가 가르키는 값이 &a[0]일텐데....왜 하나는 오류가 나고 하나는 실행이 되는지 너무 궁금합니다.</div> <div><br></div> <div>혹시나 (int**)a가 가르키는 주소와 a가 가르키는 주소가 다를까봐</div> <div><div>printf("%d \n", (int**)a);</div> <div>printf("%d \n", a);</div></div> <div>이런식으로 확인을 해보았지만</div> <div><br></div> <div>결과는 두주소값이 동일했습니다...</div> <div>같은 주소를 쏴주는데 대체왜...</div> <div><br></div> <div>개념좀 튼튼하게 잡아줄 선배님들의 조언 부탁드립니다......</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.