책 내용 질문하기
C언어 배열 선언과 관련 다시 질문 드립니다.
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
304
조회수
62
작성일
2017-03-30
작성자
탈퇴*원
첨부파일

안녕하세요?

제가 어제 주교재 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개가 다 채워진 상태 아닌가요?

답변
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와 같이 선언해서 사용하는 것이 더 적합할 것으로 생각됩니다.

향후 교재에 이 내용을 반영하도록 하겠습니다.

오늘도 즐거운 하루 되세요.

  • *
    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와 같이 선언해서 사용하는 것이 더 적합할 것으로 생각됩니다.

    향후 교재에 이 내용을 반영하도록 하겠습니다.

    오늘도 즐거운 하루 되세요.

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.