안녕하세요?
제가 어제 주교재 304페이지에서 배열 C의 크기를 10개로 선언한 것과 관련하여 질문을 드렸습니다.
이와 관련하여 아래와 같은 답변을 받았는데요.
================================================================================================
안녕하세요.
A 배열 2, 3, 4, 6, 9, 10, 12, 13, 0
B 배열 1, 3, 5, 6, 0
같은 데이터는 한 번만 병합되어
C 배열에는
1, 2, 3, 4, 5, 6, 9, 10, 12, 13, 0
이렇게 10개의 데이터가 저장됩니다.
또한 A 배열에서 0을 만나면 마지막 자료이므로 BB로 가고 BB에서도 B 배열에서 0을 만나면 마지막 자료이므로
DD로 가서 마지막에 C[K] = 0을 만나 최종적으로 10번째에 0을 저장하고 종료합니다.
그러므로 배열의 크기는 10개로 지정하면 됩니다.
오늘도 즐거운 하루 되세요.
================================================================================================
C 배열에는
1, 2, 3, 4, 5, 6, 9, 10, 12, 13, 0 =>이렇게되면 0까지 저장해야하니깐 0이 11번째에 저장되어야 하는거 아닌가요?
1~13까지 이미 10개가 다 채워진 상태 아닌가요?
안녕하세요.
학습에 불편을 드려 죄송합니다.
C 배열에는 언급하신 것처럼
1, 2, 3, 4, 5, 6, 9, 10, 12, 13, 0
이렇게 11개의 값이 저장됩니다.
C 배열의 개수가 10개로 선언되었다는 내용을 확인하지 못하고 답변을 드렸습니다.
C 배열의 개수는 10개 아닌 20개로 선언되어 있습니다. 그러므로 20개 이하인 11개의 값이 C 배열에 저장되므로 문제없이 수행됩니다.
그런데 여기 혼동될 수 있는 부분은
void DD(int c[10]) 부분입니다.
DD를 호출한 곳에서는 c, 즉 배열 c의 대표명을 기술하여 주소를 전달한 것입니다.
DD 함수에서 그 주소를 받은 후 그 주소를 사용할 수 있도록 DD 내부적으로 int형 배열 c를 10개의 크기로 선언했습니다.
결론적으로 DD 함수에서 선언한 배열의 크기를 의미가 없습니다. 왜냐하면 주소가 전달되므로 그 주소의 원래 주인인
초기 배열 C의 크기 20개 만큼 이미 지정되어 사용되는 것이므로
DD 함수에서 10개 혹은 1개로 크기를 다시 설정하였다고 해도 이미 메모리에는 20개의 크기 만큼의 공간이 할당되어 있고 그 시작 주소를 전달 받은 것이므로 C[11] 위치에 0을 기억시킬 수 있는 것입니다.
하지만 이해를 위해 내용을 보강한다면
각 함수에서 인수를 전달 받을 때 int a[10], b[10], c[10]으로 하지 않고 c 배열은 초기 선언 크기와 동일하게 c[20]으로 하거나
각각을 포인터 변수로 하여 주소만 전달 받을 수 있도록 int *a, *b, *c와 같이 선언해서 사용하는 것이 더 적합할 것으로 생각됩니다.
향후 교재에 이 내용을 반영하도록 하겠습니다.
오늘도 즐거운 하루 되세요.
-
*2017-03-30 11:17:17
안녕하세요.
학습에 불편을 드려 죄송합니다.
C 배열에는 언급하신 것처럼
1, 2, 3, 4, 5, 6, 9, 10, 12, 13, 0
이렇게 11개의 값이 저장됩니다.
C 배열의 개수가 10개로 선언되었다는 내용을 확인하지 못하고 답변을 드렸습니다.
C 배열의 개수는 10개 아닌 20개로 선언되어 있습니다. 그러므로 20개 이하인 11개의 값이 C 배열에 저장되므로 문제없이 수행됩니다.
그런데 여기 혼동될 수 있는 부분은
void DD(int c[10]) 부분입니다.
DD를 호출한 곳에서는 c, 즉 배열 c의 대표명을 기술하여 주소를 전달한 것입니다.
DD 함수에서 그 주소를 받은 후 그 주소를 사용할 수 있도록 DD 내부적으로 int형 배열 c를 10개의 크기로 선언했습니다.
결론적으로 DD 함수에서 선언한 배열의 크기를 의미가 없습니다. 왜냐하면 주소가 전달되므로 그 주소의 원래 주인인
초기 배열 C의 크기 20개 만큼 이미 지정되어 사용되는 것이므로
DD 함수에서 10개 혹은 1개로 크기를 다시 설정하였다고 해도 이미 메모리에는 20개의 크기 만큼의 공간이 할당되어 있고 그 시작 주소를 전달 받은 것이므로 C[11] 위치에 0을 기억시킬 수 있는 것입니다.
하지만 이해를 위해 내용을 보강한다면
각 함수에서 인수를 전달 받을 때 int a[10], b[10], c[10]으로 하지 않고 c 배열은 초기 선언 크기와 동일하게 c[20]으로 하거나
각각을 포인터 변수로 하여 주소만 전달 받을 수 있도록 int *a, *b, *c와 같이 선언해서 사용하는 것이 더 적합할 것으로 생각됩니다.
향후 교재에 이 내용을 반영하도록 하겠습니다.
오늘도 즐거운 하루 되세요.