배열

① 메모리

 

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[], 즉 배열의 길이와 배열을 입력으로 받고, 함수 안에서는 배열의 길이만큼 루프를 돌면서 값의 합을 구하고 최종적으로 평균값을 반환한다.
  • 이 방법을 통해 임의의 점수 개수와 점수 배열에 대해서 동적으로 평균값을 구하는 프로그램을 작성할 수 있다.

+ Recent posts