배열
① 메모리
C에는 아래와 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 차지한다.
- bool: 불리언, 1바이트
- char: 문자, 1바이트
- int: 정수, 4바이트
- float: 실수, 4바이트
- long: (더 큰) 정수, 8바이트
- double: (더 큰) 실수, 8바이트
- string: 문자열, ?바이트
컴퓨터 안에는 아래 사진과 같은 RAM 이라고 하는 물리적 칩이 메모리 역할을 한다.
쉽게 생각하면 아래 사진에서 여러 개의 노란색 사각형이 메모리를 의미하고, 작은 사각형 하나가 1바이트를 의미한다고 볼 수 있음
예를 들어 char 타입의 변수를 하나 생성하고, 그 값을 입력한다고 하면 위 사진에서 한 사각형 안에 그 변수의 값이 저장되는 것
② 배열
아래와 같이 세 개의 점수를 저장하고 그 평균을 출력하는 프로그램이 있다.
만약 점수의 개수가 더 많아진다면 이 프로그램은 많은 부분을 수정해줘야 하는데, 이 때 활용할 수 있는 것이 배열의 개념이다.
배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 이를 하나의 변수로 관리하기 위해 사용!
위 코드는 배열을 이용하면 아래와 같이 바꿀 수 있다.
- int scores[3]; 이라는 코드는 int 자료형을 가지는 크기 3의 배열을 scores 라는 이름으로 생성하겠다는 의미
- 배열의 인덱스는 0부터 시작하기 때문에, scores의 인덱스는 0, 1, 2 세 개
- 이 인덱스를 변수명 뒤 대괄호 [ ] 사이에 입력하여 배열의 원하는 위치에 원하는 값을 저장하고 불러올 수 있음
- 하지만 위와 같은 코드는 여전히 점수의 개수가 바뀌는 상황에서 제약이 많다.
④ 전역변수
- 아래 코드에서 scores 배열의 크기를 정해주는 N이라는 변수를 새로 선언
- 만약 N이 고정된 값(상수)이라면 그 값을 선언할 때 const를 앞에 붙여서 전역 변수, 즉 코드 전반에 거쳐 바뀌지 않는 값임을 지정해줄 수 있다.
- 관례적으로 이런 전역 변수의 이름은 대문자로 표기한다.
- scores의 크기로 전역 변수를 선언하였기 때문에 점수 개수가 바뀌었을때 수정해야 하는 코드가 조금 줄었다.
- 하지만 여전히 일일이 배열의 인덱스마다 점수를 지정해줘야 하는 불편함이 있다.
④ 배열의 동적 선언 및 저장
아래 코드에서와 같이 루프와 함수를 선언하여 좀 더 동적인 프로그램을 작성할 수 있습니다.
- 여기서는 배열의 크기를 사용자에게 직접 입력 받고, 배열의 크기만큼 루프를 돌면서 각 인덱스에 해당하는 값을 역시 사용자에게 동적으로 입력 받아 저장한다.
- 그리고 average 라는 함수를 따로 선언하여 평균을 구한다.
- average 함수는 length 와 array[], 즉 배열의 길이와 배열을 입력으로 받고, 함수 안에서는 배열의 길이만큼 루프를 돌면서 값의 합을 구하고 최종적으로 평균값을 반환한다.
- 이 방법을 통해 임의의 점수 개수와 점수 배열에 대해서 동적으로 평균값을 구하는 프로그램을 작성할 수 있다.
'boostcourse > CS50' 카테고리의 다른 글
CS50 4. 알고리즘(1) - 검색 알고리즘, 알고리즘 표기법 (0) | 2022.10.24 |
---|---|
CS50 3. 배열 (3) - 문자열과 배열, 문자열의 활용 (0) | 2022.10.23 |
CS50 3. 배열 (1) - 컴파일링, 디버깅, 코드의 디자인 (0) | 2022.10.22 |
CS50 2. C 언어 (3) - 자료형, 형식 지정자, 연산자 (0) | 2022.10.22 |
CS50 2. C 언어 (2) - 조건문과 루프 (0) | 2022.10.22 |