본문 바로가기

C Langauage

Chapter 6. 배열(Array)과 문자열(String)

Chapter 6. 배열(Array)과 문자열(String)
1. 배열
 - 같은 형의 데이터들로 이루어진 집합으로 자료 구조의 하나
 - 같은 타입의 변수가 여러 개 필요한 경우 사용
 - 같은 데이터형의 변수를 메모리에 연속적으로 할당하고 같은 이름으로 사용하는 방법을 제공
 - 배열의 선언

 데이터형 배열명[크기];
    int       arr[100];

 - 배열 선언 시 필요 요소
 · 배령의 데이터 형 : 배열 또한 일종의 변수이기 때문에 데이터 형이 필요하다.
 · 배열의 이름 : 배열 또한 일종의 변수이기 때문에 변수 명처럼 배열의 이름도 필요하다.
 · 배열의 크기(길이) : 배열의 원소의 개수에 해당한다.
   ※ 배열의 크기는 반드시 0보다 큰 정수형 상수로만 지정할 수 있다.
      또한 리터럴 상수가 아닌 변수 또는 매크로 상수에 의해서 크기를 지정할 수도 있다.
      (단, 변수와 매크로상수도 0보다 큰 정수형의 값을 가지고 있어야 한다.)

 - 배열의 사용 및 접근
 · 배열을 사용할 때는 배열의 원소 번호를 호출해서 각 배열의 원소를 사용하는데 이때 사용하는 원소 번호를 인덱스(index) 또는 첨자라고 한다.
 · 배열의 인덱스는 항상 0부터 시작해 하나씩 증가하기 때문에 배열 인덱스 끝 번호는 크기-1이 된다.
 · 배열이 메모리에서 할당 될 때 모든 원소가 연달아 할당되기 때문에 주소 값은 모두 연속되어 있다.
 · 배열을 사용할 때 배열의 인덱스가 유효 범위를 넘어가지 않게 주의해야한다.
 - 배열의 초기화

 방법 1 
 arr[0] = 1;
 …………
 arr[배열크기-1] = 5;

 

 방법 2
 int arr[크기] = {1,2,3,………,6,7};
 int arr[] = {1,2,3,………,6,7};
 char str[14] = "Good morning";

  · 배열의 초기화 방법
  ◦ 방법 1
   ▹ 배열의 원소 하나하나에 값을 초기화한다..
   ▹ 값을 대입하는 방법은 변수의 값을 초기화하는 방법과 같다.
  ◦ 방법 2
   ▹ 배열에 집합 전체를 중괄호({})로 묶어 초기화한다.
   ▹ 값을 대입할 때는 중괄호({}) 안에 값을 대입하고 각각의 값 사이에는 콤마(,)로 구분점을 만들어준다.
   ▹ 중괄호({})를 초기화하는 목적으로 사용하는 경우 반드시 초기값 하나 이상을 지정해야 하며, 배열의 크기보다 값이 많아서는 안 된다.
   ▹ 배열의 크기는 원칙적으로 생략이 불가능하지만 배열 선언과 동시에 초기화를 한다면 배열의 크기를 생략할 수 있다.
   ▹ 문자열의 경우에는 중괄호({}) 대신 큰따옴표("")를 사용한다.

     (자세한 내용은 2. 참고)
 - 다차원 배열
 · 배열의 원소에 접근하기 위해 인덱스를 둘 이상 사용하는 경우 사용하는 배열
 · 이차원 배열의 선언

 데이터형 배열명[크기1][크기2]
    int     array[   1   ][   2   ]

   ◦ 일반적으로 이차원배열을 이해할 때 행렬 또는 표(테이블)를 사용해 크기1을 행, 크기2를 열로 인용한다.
   ◦ 행과 열은 논리적인 표현일 뿐 메모리상에서는 1차원 배열과 같은 방식으로 할당된다.
 · 이차원 배열의 초기화

 방법 1

 arr[0][0] = 1;
 …………
 arr[크기1-1][크기2-1] = 5;

 방법 2
int arr[크기1][크기2]
 = {{1,2,3,…},{1,2,3,…},……};
int arr[][] = {{1,2,3,…},{1,2,3,…},……};

  ◦ 방법 1
   ▹ 배열의 원소 하나하나에 값을 초기화한다..
   ▹ 값을 대입하는 방법은 변수의 값을 초기화하는 방법과 같다.
  ◦ 방법 2
   ▹ 배열에 집합 전체를 중괄호({})로 묶어 초기화하는데 크기1의 크기에 따라 중괄호({}) 내의 중괄호({})의 수가 결정된다.
   ▹ 값을 대입할 때 중괄호({})를 집합을 구분하기위해 각각의 중괄호({}) 사이에는 콤마(,)로 구분점을 만들어준다.
   ▹ 이차원배열의 크기1크기2는 둘 중 앞의 인덱스만 생략가능하고 삼차원배열부터는 생략이 불가능하다.
 - 배열의 메모리 할당

 일차원 배열 메모리 할당

 

 

 이차원 배열 메모리 할당 

 

2. 문자열
 - 문자 배열
  · 연속된 문자들의 모임으로 char형 배열이기 때문에 문자 배열이라고 한다..
  · 반드시 문자열의 끝에는 문자열의 끝을 표시하는 널(\0)문자를 함께 보관해야 한다.
  · 문자 배열의 선언

 char 배열명[문자열크기+1];

  ◦ 문자열은 문자 배열이라고도 하지만 문자열 변수라고도 한다.
  ◦ 문자열은 문자 데이터형의 배열이기 때문에 데이터형은 char이다.
  ◦ 문자열을 선언할 때는 사용하려는 문자열의 길이+1만큼 배열의 크기를 지정해 문자열 끝에는 항상 널(null) 문자를 저장해야한다.
  ◦ 문자열에서 널 문자는 문자열의 끝을 표시하는 문자이다.
   ※ 널(null) 문자 : 특정 속성에 해당되는 값이 없음을 나타내며 0이나 공백 문자와는 다르다.
 · 문자 배열의 초기화

 방법 1
 char string[4];
 string[0] = 'a';
 string[1] = 'b';
 string[2] = 'c';
 string[3] = '\0';

 방법 2
 char string[4]
  = {'a', 'b', 'c', '\0'};

 

 

 방법 3
 char string[4] = "abc";

 

 

 

  ◦ 방법1
   ▹ 배열에서처럼 문자배열의 원소 하나하나를 초기화하는 방법
   ▹ 단, 원소 하나하나를 초기화 한다면 맨 끝 원소는 반드시 널문자(\0)를 지정해줘야 하며 지정하지 않을 시 쓰레기 값을 갖는다.
  ◦ 방법2
   ▹ 배열에서처럼 문자배열의 값을 한 번에 초기화하는 방법으로 중괄호를 사용한다.
   ▹  데이터형이 문자형이기 때문에 작은따옴표('')를 사용해 초기화해야 한다.
   ▹ 단, 방법1과 같이 맨 끝원소는 반드시 널문자(\0)를 지정해줘야 한다.
  ◦ 방법3
   ▹ 문자열을 초기화할 때는 중괄호({}) 대신 큰따옴표("")를 이용해 초기화를 할 수 있다.
   ▹ 큰따옴표("")를 이용한 초기화에서는 문자 배열의 크기가 아무리 커도 큰따옴표("")안의 문자 이외에 배열원소는 모두 널 문자로 채워진다.
 - 문자 배열의 메모리 할당

 

 


 


'C Langauage' 카테고리의 다른 글

Chapter 8. 포인터(Pointer)  (0) 2015.08.05
Chapter 7. 함수(Function)  (0) 2015.08.05
Chapter 5. 제어문  (0) 2015.08.05
Chapter 4. 연산자(Operator)  (0) 2015.08.05
Chapter 3. 자료의 입출력  (0) 2015.08.05