2차원 배열 포인터를 연습하는 과정에서 2차원 배열을 포인터 배열로 인자를 주고 다시 return 받는 함수를 만들었습니다. <div><br></div> <div><div>#include <stdio.h></div> <div><br></div> <div>float ( *proc ( float(*mat)[4] ) )[4]</div> <div>{</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float result[4][4];</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int i = 0; i < 4; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int j = 0; j < 4; j++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>result[i][j] = mat[i][j];</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><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return result;</div> <div><br></div> <div>}</div> <div><br></div> <div><br></div> <div>void main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float(*b)[4];</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>b = proc(a);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int i = 0; i < 4; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int j = 0; j < 4; j++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f ", b[i][j]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div>}</div> <div><br></div> <div>아래는 결과입니다.</div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201510/1444926546YKoc9XDYc.png" width="689" height="467" alt="result1.png" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div>이때 main함수에서 포인터배열 b를 이제 하나하나 찍어두는데</div> <div><br></div> <div>컴파일도 되고 실행도 되지만 값이 a와 같은 값이 찍히지 않습니다.</div> <div><br></div> <div>그래서 실험을 해보았습니다.</div> <div><br></div> <div>위의 proc함수는 그대로 사용하였으므로</div> <div><br></div> <div>생략하고 실헌한main함수만 기록하겠습니다.</div> <div><br></div> <div>실험 1.</div> <div><br></div> <div> <div><br></div> <div>void main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float(*b)[4];</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>b = proc(a);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][0]); // 각각 따로따로 출력해보았습니다.</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][1]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][2]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][3]);</div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">}</span></div></div> <div><span style="font-size:9pt;line-height:1.5;">결과</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div> <div style="font-size:9pt;line-height:1.5;text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201510/1444926595XUlBv9tWfQO.png" width="689" height="467" alt="result2.png" style="border:none;"></div> <div style="font-size:9pt;line-height:1.5;text-align:left;"><br></div> <div style="font-size:9pt;line-height:1.5;text-align:left;">실험 2.</div> <div style="text-align:left;"> <div><br></div> <div>void main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float(*b)[4];</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>b = proc(a);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>//printf("%f \n", b[0][0]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][1]); // 0,0을 제외하고 0,1부터 출력해보았습니다.</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][2]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f \n", b[0][3]);</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>/*</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int i = 0; i < 4; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int j = 0; j < 4; j++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%f ", b[i][j]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}*/</div> <div>}</div></div><br></div> <div>결과</div> <div><br></div> <div><img src="http://thimg.todayhumor.co.kr/upfile/201510/1444926627oXenQp1la4MB2PaXLu56Y6.png" width="679" height="438" alt="result3.png" style="border:none;"></div></div> <div><br></div> <div><br></div> <div>이런식으로 b값을 연속적으로 출력하게 되면 첫번째 값을 제외한 나머지 값들이 전부 쓰레기 값이 출력되는것 같습니다.</div> <div><br></div> <div>그래서</div> <div><br></div> <div>주소값을 출력해보았습니다.</div> <div><br></div> <div><div><br></div> <div>void main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float a[4][4] = { 1, 2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16 };</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>float(*b)[4];</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>b = proc(a);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%d \n", sizeof(float (*)[4])); // b의 자료형 크기 출력</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int i = 0; i < 4; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for (int j = 0; j < 4; j++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%p \n", &b[i][j]); // 각 원소의 주소출력</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>결과</div> <div><br></div> <div><div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201510/1444926840KqOE78UPD.png" width="679" height="442" alt="result4.png" style="border:none;"></div> <div style="text-align:left;"><br></div> <div style="text-align:left;">이런식으로 주소는 모두 연속적입니다...</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">아직도 원인을 모르겠어서...이렇게</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">질문을 남깁니다!!</div> <div style="text-align:left;"><br></div> <div style="text-align:left;">도와주시면 정말 감사드리겠습니다...!!!!</div><br></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.