Arrays adopted from KNK C Programming A Modern

  • Slides: 36
Download presentation
Arrays adopted from KNK C Programming : A Modern Approach

Arrays adopted from KNK C Programming : A Modern Approach

Array Subscripting • a[i] 은 lvalues이기 때문에 다른 변수들처럼 값을 할당 받을 수 있음

Array Subscripting • a[i] 은 lvalues이기 때문에 다른 변수들처럼 값을 할당 받을 수 있음 a[0] = 1; // 인덱스가 실제 저장된 값이 아님!! printf("%dn", a[5]); ++a[i]; Copyright © 2008 W. W. Norton & Company. All rights reserved. 6

Designated Initializers (C 99) • C 99의 designated initializers 위치 지정 초기화 로 문제

Designated Initializers (C 99) • C 99의 designated initializers 위치 지정 초기화 로 문제 해결. • 앞의 예를 위치 지정 초기화로 표현한 예: int a[15] = {[2] = 29, [9] = 7, [14] = 48}; • 괄호 안의 숫자가 designator 지정자 역할을 함. Copyright © 2008 W. W. Norton & Company. All rights reserved. 15

Designated Initializers (C 99) • C 99 표준 이전의 방식을 겸해서 쓸 수 있음:

Designated Initializers (C 99) • C 99 표준 이전의 방식을 겸해서 쓸 수 있음: int c[10] = {5, 1, 9, [4] = 3, 7, 2, [8] = 6}; Copyright © 2008 W. W. Norton & Company. All rights reserved. 18

Using the sizeof Operator with Arrays • 경고 메시지를 피하고 싶으면 cast를 해서 부호

Using the sizeof Operator with Arrays • 경고 메시지를 피하고 싶으면 cast를 해서 부호 있도록 해야 함 기존의 sizeof(a) / sizeof(a[0])을 for (i = 0; i < (int) (sizeof(a) / sizeof(a[0])); i++) a[i] = 0; • 매크로를 쓰면 좀 더 유용함: #define SIZE ((int) (sizeof(a) / sizeof(a[0]))) for (i = 0; i < SIZE; i++) a[i] = 0; Copyright © 2008 W. W. Norton & Company. All rights reserved. 22

Multidimensional Arrays • 중첩 for 루프는 다차원 배열을 처리하는 데 이상적임 • 단위 행렬을

Multidimensional Arrays • 중첩 for 루프는 다차원 배열을 처리하는 데 이상적임 • 단위 행렬을 초기화하는 문제를 생각해보자. 두 개의 중첩 for 루프로 충분히 해결할 수 있음: #define N 10 double ident[N][N]; int row, col; for (row = 0; row < N; row++) for (col = 0; col < N; col++) if (row == col) ident[row][col] = 1. 0; else ident[row][col] = 0. 0; Copyright © 2008 W. W. Norton & Company. All rights reserved. 26

Initializing a Multidimensional Array • 칸에 해당하는 요소들이 배열의 칸수 보다 적은 경우, 명시

Initializing a Multidimensional Array • 칸에 해당하는 요소들이 배열의 칸수 보다 적은 경우, 명시 된 값들 외에는 0으로 초기화 됨: int m[5][9] = {{1, {0, {1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, Copyright © 2008 W. W. Norton & Company. All rights reserved. 1, 0, 0, 0, 1, 1}, 1}, 1, 1}}; 29

Initializing a Multidimensional Array • C 99의 지정 초기화도 다차원 배열에서 쓸 수가 있음

Initializing a Multidimensional Array • C 99의 지정 초기화도 다차원 배열에서 쓸 수가 있음 • 2 × 2 단위 행렬을 초기화 하는 예: double ident[2][2] = {[0][0] = 1. 0, [1][1] = 1. 0}; 명시되지 않은 나머지는 모두 0으로 채움 Copyright © 2008 W. W. Norton & Company. All rights reserved. 31