티스토리 뷰

C언어/K.N.King C PROGRAMMING

Chapter 8

소심야채 2020. 9. 1. 12:52

Arrays

 

 

One-Dimensional Arrays

 

■ 배열을 선언하려면 배열의 요소 유형과 요소 수를 지정해야한다. 예를들어, 배열 a에 int 타입의 요소가 10개 있음을 선언하려면 다음과 같이 작성한다.     int a[10];

 

■ 배열의 요소는 모든 타입이 될 수 있다. 배열의 길이는 임의의 (정수)상수 표현식으로 지정할 수 있다. 프로그램이 변경 될 때 배열 길이를 조정해야 할 수 있으므로 매크로를 사용하여 배열 길이를 정의하는 것이 좋다.

   #define N 10

   int a[N];

 

■ C에서는 배열 첨자 경계가 올바른지 확인을 요구되지 않는다. 배열 첨자가 범위를 벗어나면 정의되지 않은 프로그램 동작이다.

 

 

Array Initialization

 

■ 다른 변수와 마찬가지로 배열도 선언 된 시점에 초기 값을 제공 할 수 있다.

 

■ 배열 초기화의 가장 일반적인 형식은 중괄호로 묶고 쉼표로 구분 된 상수표현식 목록이다.

   int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

 

■ 초기화가 배열보다 짧으면 배열의 나머지 요소에 값에 0이 지정된다.

   int a[10] = {1, 2, 3, 4, 5, 6};   // initial value of a is {1, 2, 3, 4, 5, 6, 0, 0, 0, 0}

 

■ 초기화가 완전히 비어있는 것은 불법이므로 중괄호 안에 한개의 0을 넣는다. 선언된 배열길이 보다 초기화가 긴 것도 불법이다.

 

■ 초기화가 있으면 배열 길이를 생략 할 수 있다.  int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

컴파일러는 초기화 길이를 사용하여 배열의 길이를 결정한다.

 

 

 

Designated Initializers

 

■ int a[15] = {[2] = 29, [9] = 7, [14] = 48};

괄호 안의 각 숫자는 지정된 숫자라고 부른다. 요소가 나열되는 순서는 중요하지 않다. 따라서 int a[15] = {[14] = 48,  [9] = 7, [2] = 29}와 같이 작성할 수도 있다.

 

■ int b[] = {[5] = 10, [23] = 13, [11] = 36, [15] = 29};   

23이 지정자로 표시된다는 사실은 배열의 길이가 24가 되도록 강제한다.

 

■ int c[10] = {5, 1, 9, [4] = 3, 7, 2, [8] = 6}  // initial value of c is {5, 1, 9, 0, 3, 7, 2, 0, 6, 0}

위 초기화는 배열의 처음 세 요소가 5, 1, 9가 되도록 지정한다. 4번째 요소는 3을 갖는다. 4번째 요소 뒤의 두 요소는 7과 2가 된다. 마지막으로 8번째 요소는 6을 갖는다. 값을 지정되지않은 모든 요소는 기본값 0이 된다.

 

 

 

Multidimensional Arrays

 

■ 2차원 배열을 테이블로 시각화하지만 실제로 컴퓨터 메모리에 저장되는 방식은 아니다. C는 행 우선순서로 배열을 저장한다. 

 

 

Initializing a Multidimensional Array

 

■ 1차원 배열초기화를 중첩하여 2차원 배열에 대한 초기화를 만들 수 있다.

 

■ 초기화가 다차원 배열을 채울만큼 충분히 크지 않은 경우 나머지 요소에는 값 0이 지정된다.

 

 

Varialbe-Length Arrays (C99)

 

■ C99 에서는 배열 길이에 상수가 아닌 표현식을 사용할 수 있다.

int n;

....

scanf("%d", &n);

int a[j]; // C99 only - length of array depends on n

 

■ VLA의 길이는 프로그램이 컴파일 될 때가 아닌 프로그램이 실행될 때 계산된다.

'C언어 > K.N.King C PROGRAMMING' 카테고리의 다른 글

Chapter 7  (0) 2020.08.27
Chapter 6  (0) 2020.08.26
Chapter 5  (0) 2020.08.25
Chapter 4  (0) 2020.08.24
Chapter 3  (0) 2020.08.20
댓글