정체불명의 모모
c++ 02 : 배열 (어서와c++은 처음이지?) 본문
배열(array)은 같은 종류의 데이터들이 순차적으로 메모리에 저장되는 자료 구조이다.
가가의 데이터들은 인덱스(번호)를 사용하여 독립적으로 접근된다.
1. 배열의 정의
int scores[10] ; |
= 크기가 10인 int형 배열을 정의
※ c++에서는 항상 배열 요소의 번호가 0 부터 시작한다.
scores[5] = 80 ; |
≪ 참 고 ≫
= 배열의 크기를 const지시자로 만들어진 기호 상수로 지정하면 배열의 크기를 변경하기가 쉬워진다.
즉, 다른 부분의 변경없이 기호 상수의 정의만 바꾸면 된다.
const int SUDENTS = 10; int scores[STUDENTS]; |
다음과 같이 #define을 사용하여도 된다.
#define STUDENTS 10 int scores[STIDENTS]; |
예제1
= 학생들의 성적을 입력받아서 평균을 구하는 프로그램을 배열을 이용하여서 작성하여 보자.
#include <iostream>
using namespace std;
int main()
{
const int STUDENTS = 10;
int scores[STUENS]'
int sum = 0 ;
int i, average ;
for( i = 0 ; i < STUDENTS ; i++ )
{
cout << " 학생들의 성적을 입력하시오 : " ;
cin >> scores[i];
}
for( i = 0 ; i <STUDENTS ; i++)
sum += scores[i];
average = sum / STUDENTS;
cout << "성적 평균" << average << endl;
return 0;
}
const를 사용하여 값을 주었습니다.
2. 배열의 초기화
= 배열은 여러개의 요소로 이루어진다. 따라서 초기값도 하나가 아니고 요소의 개수만큼 필요 합니다.
int sales[5] = { 100, 200, 300, 400, 500 }; |
만약, 초기값의 개수가 요소들의 개수보다 적은 경우에는 앞에 있는 요소들만 초기화 된다.
나머지 배열 요소들은 0으로 초기화 된다.
int sales[5] = { 100, 200, 300 } ; |
배열의 크기가 비어있고 초기값의 리스트만 있는 경우에는 컴파일러가 자동으로 초기값들의 개수만큼의 배열 크기를
설정한다.
int sales[] = { 100, 200, 300, 400, 500, 600, 700 }; |
이러면 배열 sales의 크기는 초기값의 개수에 따라서 7이 된다.
◆ c++11 와 c++14에서 배열의 초기화
= 최신의 c++에서는 배열에 대해서도 다음과 같은 보편적 초기화 문법을 사용할 수 있다.
즉 변수와 초기값 사이에 등호(=)가 없어도 된다.
int scores[] = {10,20,30};
int scores[]{10,20,30}; // (=) 부호를 안 넣어도 된다.
보편적 초기화 방법은 일반 변수 초기화나 문자열 초기화, 객체 최기화에도 사용할 수 있다.
int a{0}; // int a = 0; 과 동일하다.
string s{"hello"}; // string s="hello";
vector<string> list{"alpha", "beta", "gamma"}; // 벡터 생성시 초기화
초기화할때 (=)를 하지 않아도 된다.
▒ 경고 ▒
1. 함수를 초기화 하지 않으면, 외부에 정의된 배열은 자동적으로 0으로 초기화 된다. 하지만 함수 내부에 정의된
배열은 쓰레기를 가진다. 주의 하도록 하자.
2. 배열을 사용할 때 조심해여야 하는 부분이 인덱스의 범위이다. 인덱스가 배열의 크기를 벗어나게 되면 프로그램에
치명적인 오류를 발생시킨다. 컴파일러는 프로그래머가 유효 범위 안에 있는 인덱스를 사용 하고 있는지를 확인하여 주지 않는다. c++ 에서는 프로그래머가 인덱스가 범윌,ㄹ 벗어나지 않았는지를 확인 하고 책임을 져야 한다.
ex) 다음의 배열 선언이 있다고 하자.
int scores[10];
위의 배열에서 사용할 수 있는 인덱스의 범위는 0에서 9까지 이다. 다음과 같은 문장은 아주 위험한 문장이다.
scores[10] = 99; // 오류! 인덱스 10은 적합한 범위가 아니다.
이 경우에는 최악의 경우, 컴퓨터 시스템 자체가 중단될 수 있다.
왜냐하면 배열 범위를 벗어나는 인덱스를 사용하면 엉뚱한 변수의 값을 변경하는 결과를 가져오기 때문이다.
'프로그래밍(c++)' 카테고리의 다른 글
c++ 문제 : 배열에서 최대값 찾기 (어서와c++은 처음이지?) (0) | 2019.12.03 |
---|---|
c++ 02 : 범위-기반for 루프 (어서와c++은 처음이지?) (0) | 2019.12.03 |
c++ 02문제 : 도형의 면적 계산하기 (어서와c++은 처음이지?) (0) | 2019.11.28 |
c++ 02문제 : 자음과 모음 개수 세기 (어서와c++은 처음이지?) (0) | 2019.11.28 |
c++ 02 : for 루프문 (어서와c++은 처음이지?) (0) | 2019.11.28 |