2차원 배열과 관련하여 몇 가지 질문을 드리고 싶습니다.
, 최 승헌님이 작성1. 482p에서 sizeof(numArr[0])이 왜 2차원 배열의 가로 한 줄의 크기를 나타내는 것인지 궁금합니다. 0 대신 다른 숫자를 넣어도 똑같은 결과가 도출되는데 그 이유 역시도 궁금합니다.
2. 487p에서 2차원 배열(or 2차원 배열 포인터)을 역참조하면 배열이 시작하는 주소, 세로 첫 번째의 주소([0][0])가 나온다고 설명해주셨습니다. 이는 499p의 38-3그림을 통해서 이해할 수 있었습니다.
-> 38-3에서 m은 m[0]의 주솟값을 가지고, m[0]=m[0][0]의 주솟값을 가지므로, m(2차원 배열 포인터)을 역참조하면 m[0]의 값인, 배열이 시작하는 주소인 m[0][0]의 주솟값이 나오게 됩니다.
이처럼, 배열의 이름에는 첫 번째 주소만 대표로 저장되어 있습니다. 그렇다면 첫 번째 주소만을 저장하고 있는 배열에서 어떻게 다른 요소의 값을 출력할 수 있는지 궁금합니다. 첫 번째 주소를 필두로 다른 요소의 값들이 (배열을 선언함으로써 or 이중 포인터를 통해 배열을 사용함으로써) 연결되는 것인지, 아니면 다른 방식으로 이행이 되는 것인지 궁금합니다.
Re: 2차원 배열과 관련하여 몇 가지 질문을 드리고 싶습니다.
, 도장_ 관리자님이 작성해당 질문은 그림 38-3을 이해하면 됩니다.
배열은 메모리에 순차적으로 저장되어 있으므로 [ ] 같은 첨자 연산자를 쓰지 않고
직접 계산해서 접근할 수도 있습니다.
1차원 배열 같은 경우에
*(m + 2)는 m[2]에 있는 요소에 접근하는 것과 같습니다.
2차원 배열 같은 경우에도
*(m + y * width + x)로 접근할 수도 있습니다.
이와 같은 접근은 UNIT 81까지 학습하면 반복해서 학습하고
심사문제를 통과하면 이해하게 되어 있습니다.
배열 이름은 첫 번째 주소를 가리키고, 첫 번째 주소에는 배열의 첫 번째 원소가 저장되어 있으니까 값을 접근하면 배열의 첫 번째 원소가 나오는 것이 정상입니다.
학습자 중에는 난 꼭 이 원리를 이해해야겠어 라는 유형이 있는데,
불행히도 프로그래밍은 반복해서 실습하면서 익히는 게 더 유리한 내용이 많습니다.
자전거 타기는 넘어지면서 페달을 밟으면 쓰러지지 않는다는 것을 학습하는 게 더 빠릅니다.
자전거를 타기 위해
자이로 효과, 회전관성, 캐스터각, 캠버 스러스트 원리를 배울 필요는 없습니다.
자전거를 탈 수 있는 원리이기도 하죠.
마찬가지로 교통카드가 동작하는 원리도 복잡하지만, 대다수는 사용법만 알면 됩니다.
계속 반복해서 사용하면서 사용법에 익숙해진 다음에 개념을 살펴보면 자연히 이해하게 됩니다.
Re: 2차원 배열과 관련하여 몇 가지 질문을 드리고 싶습니다.
, 최 승헌님이 작성이해하기 쉽게 설명해주셔서 감사합니다. 이 점 꼭 유의하여 계속 학습해나가겠습니다. 진심으로 감사드립니다.