본문 바로가기
프로그래밍 언어/C

C언어 - 8. 배열과 포인터(1)

by nomfang 2021. 3. 16.
728x90
반응형

배열

-> 많은 자료처리를 위해서는 일관성 있고 효율적인 새로운 변수가 필요하다

  • 하나의 변수 이름에 순서에 의한 번호 부여
  • 변수명[1], 변수명[2], ...
  • 효율적인 자료 처리 가능

배열의 정의

  • 동일 자료형을 갖는 자료들의 리스트
  • 배열의 각 요소는 하나의 변수로 취급
  • 배열은 배열명과 첨자로 구분

배열의 선언 형테

  • 1차원 배열
  • 2차원 배열
  • 3차원 배열

1차원 배열

  • 배열의 첨자가 하나만 있는 배열
  • 첨자의 개수는 배열 전체 구성요소의 개수를 의미
  • 배열의 각 요소는 배열명과 첨자로 구분
    -> 0 부터 시작
    -> 자료형과 기억클래스를 갖는다 (자료형을 사전에 선언해야함)

1차원 배열 선언

  • 형식 : 자료형 배열명 [개수]
  • 사용 예 : int a[10]
    -> 크기가 10인 정수형 1차원 배열 a를 선언한 것이다

1차원 배열의 기억공간 표현

  • 배열명 : 배열영역의 시작 주소
    -> int일 경우 각 요소의 자료는 4byte

1차원 배열의 초기화

-> 배열을 선언하면 기억공간을 초기화 해야 함

  • 초기화 방법
    1. 배열 선언 후 초기값 할당
    2. 배열 선언과 동시에 초기값 할당
    3. 외부로부터 자료를 입력 받아 초기화
  • 배열선언 후 초기값 할당
  • int array[4]; array[0] = 10; array[1] = 20; array[2] = 30; array[3] = 40;
  • 배열 선언과 동시에 초기값 할당
  • int array[4] = {10, 20, 30, 40}; // 배열 크기 생략 가능 // 마지막 값을 공백으로 두면 0으로 초기화됨 // 중간에 공백 발생시, 초과된 값 입력 시 에러 발생
  • 외부로부터 자료를 입력 받아 초기화
  • int x[10]; for(int i=0; i<10; i++) { scanf("%d", &x[i]); }

1차원 배열의 초기화 후 기억공간의 표현

int array[5] = {10 ,20, 30, 40, 50};

다차원 배열

2차원 배열 선언

  • 형식 : 자료형 배열명 [행의 수][열의 수]
  • 사용 예 : a[3][4]
    -> 정수형 12개의 요소를 가진 2차원 배열 a를 3행 4열로

2차원 배열의 선언과 초기화

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

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

2차원 배열의 기억공간 표현

  • 배열명은 배열 전체의 시작 주소
  • 각 배열의 [0]번째 열은 각 부분 배열의 시작 주소 (&a[2][0])

3차원 배열 선언

  • 형식 : 자료형 배열명[면의 수][행의 수][열의 수]
  • 사용 예 : int a [2][3][4]
  • 의미 : 정수형 24개 요소를 가진 2면 3행 4열로 이루어진 3차원 배열

char형 배열

  • 형식 : char 배열명[문자열 길이 + 1]
  • 사용 예 : char str[12]
  • 의미 : 12의 길이를 가진 char형 배열

char형 배열 선언과 초기화

char name[] = "HONG GIL DONG"; -> 문자열 단위로 초기화 (자동적으로 널 문자 삽입)
char address[] = " {'S', 'E', 'O', 'U', 'L', '\0'}; -> 문자 단위로 초기화 ( 널 문자를 삽입해야 함)

  • 널 문자 '\0' 을 추가하지 않을 경우 마지막에 쓰레기 값이 붙을 수 있다
  • scanf()로 입력 받아도 자동으로 널 문자가 삽입된다

배열을 함수의 매개변수로 사용할 경우

  • 배열 명만 명시하여 호출한다
  • 함수의 헤더에는 가장 높은 차원의 크기를 생략 가능하다 (1차원일 경우도 생략 가능)
    -> 함수의 이름은 배열의 위치가 전달 되는 것이기 때문에?
반응형

댓글