정체불명의 모모

c++ 02 : 배열 (어서와c++은 처음이지?) 본문

프로그래밍(c++)

c++ 02 : 배열 (어서와c++은 처음이지?)

정체불명의 모모 2019. 12. 3. 20:07

배열(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 } ;

초기화 하지 않은 요소들은 0이 되버린다.

배열의 크기가 비어있고 초기값의 리스트만 있는 경우에는 컴파일러가 자동으로 초기값들의 개수만큼의 배열 크기를 

 설정한다.

 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은 적합한 범위가 아니다.

 이 경우에는 최악의 경우, 컴퓨터 시스템 자체가 중단될 수 있다.

  왜냐하면 배열 범위를 벗어나는 인덱스를 사용하면 엉뚱한 변수의 값을 변경하는 결과를 가져오기 때문이다.

Comments