인프런 커뮤니티 질문&답변

mj K님의 프로필 이미지
mj K

작성한 질문수

홍정모의 따라하며 배우는 C++

6.3 배열과 반복문

결과 3:35 부분의미

해결된 질문

작성

·

167

1

안녕하세요 교수님

main함수안에

const int num_students = 5; 쓰고 시작하는데  이 뜻이 메모리 5개 빌릴거야 하는  뜻의 array 맞나요?

그리고 for문안에 들어가는 total_score += score[i] ; 의 의미가 헷갈리는데 설명해주시면 정말 도움이될것 같아요 감사합니다 

답변 2

6

배열의 크기는 반드시 컴파일 타임에 정해져야 합니다. 즉, 배열의 원소 갯수는 실행 중에 결정되는게 아니라 미리 프로그램 실행 전에 배열이 얼마만큼의 메모리 크기를 할당 받을지 결정이 되어 있어야 합니다! 한번 정하면 크기를 변경할 수도 없구요.

그래서 배열의 크기는 int scores[5] 이렇게 직접 리터럴 상수를 명시해주거나 혹은, const int num_students = 5;  int scores[num_students] 이렇게 상수를 통해 배열의 크기를 결정하고 선언해야 합니다. 상수의 메모리는 프로그램 실행하기도 전에 컴파일 타임에 미리 할당되기 때문이에요!

덧붙여서 const 상수가 아닌 그냥 int num_students = 5; 였다면 이 일반 변수로 int scores[num_students] 이렇게 scores의 배열의 크기를 결정하는건 오류가 발생합니다. 상수가 아닌 일반 변수의 메모리는 프로그램을 실행 중에 할당되기 때문이에요! 즉, 프로그램이 실행 되어야지만 5 라는 값이 num_students 변수에 들어가게 됩니다. 그래서 배열의 크기는 프로그램 실행 전에 미리 결정되야 하므로 일반 변수로는 배열의 크기를 결정할 수 없기 때문에 이렇게 상수로 크기를 선언해주신겁니다! 

설명이 길었네요. ㅠ ㅠ 결론은 scores 의 배열의 크기를  const int num_students = 5; 이 상수를 통해 컴파일 타임에 결정하기 위해 교수님께서 쓰고 시작하신 것입니다. 메모리 5 개 빌릴거야 라는 말씀은 맞는데, array가 맞는지 물으셔서 이렇게 길게 좀 설명드려 보았습니다. const int num_students = 5;는 배열의 크기를 선언하기 위해 만든 상수일 뿐이고, array 선언은  바로 int scores[num_students] ={ 84, 92, 76, 81, 56 } ; 이 문장이 됩니다. 이렇게 컴파일 타임에 선언한 5 값을 가지는 상수로서 5 크기를 가지는 scores 배열을 만들 수 있었네요!

 for문에서 i 는 i = 0 에서 시작하여 num_students - 1 값에 도달할 때까지 i++을 통해 1 씩 증가하지요. total_score += scores[i]; 는 곧 total_score = total_score + scores[i]; 이 문장을 줄여쓴 것과 같으므로 첫 번째 반복에서 total_score 에 scores[0] 이 합산 되고, 두 번째 반복에서 또 첫 번째 반복에서 업뎃 됐던 그 total_score 에 scorse[1] 이 누적 합산 되고, 세 번째 반복에서 또 두 번째 반복에서 최신 업데이트 됐던 그 total_score 에 score[2] 이 누적 합산되고.... 이런 의미입니다. 따라서 전체 for문이 다 돌고나면 total_score에는 scores 배열의 모든 원소들의 합이 들어가게 됩니다.

+= 이 연산자 의미에 대해 헷갈리셨던거라면 3.2 산술연산자 강의에서 12:00 분대를 참고해주세요!

2

mj K님의 프로필 이미지
mj K
질문자

설명이 정말 넘 자세하고 이해하기 쉬워요 정말 감사드려요❤️

mj K님의 프로필 이미지
mj K

작성한 질문수

질문하기