카테고리 없음

배열

도영수 2017. 3. 21. 21:14

특징


1. 0부터 시작


2. 배열이 차지하는 메모리의 양은 sizeof(타입)*크기 로 알 수 있다.

  배열 크기=sizeof(배열)/sizeof(배열[0]);


3. 배열을 선언할 때 크기값은 반드시 상수로 주어야 한다

  for (i=0;i<5;i++) ar[i]=0;


4. C언어는 배열의 범위를 전혀 점검하지 않는다.

  배열 범위를 벗어나는 것을 체크하지 않기 때문에, 범위를 잘 못 설정하면 실행 중 다운 된다.




다차원 배열




배열명

      배열명이 단독으로 사용되면 배열의 시작번지값을 가지는 포인터 상수이다



배열은 상수 이기 때문에 다음과 같은 방법으로 내용은 복사 할 수 없다.


int ar[5]={1,2,3,4,5};

int ar2[5];

 

ar2=ar;


그래서 배열을 하나씩 증가 시키면서 옮겨야 한다.


for (i=0;i<sizeof(ar)/sizeof(ar[0]);i++) {

     ar2[i]=ar[i];

}



배열의 쓰레기 값


  : Garbage

#include <Turboc.h>

 

void main()

{

     int ar[5];

     int i;

 

     for (i=0;i<5;i++) {

          printf("ar[%d]=%d\n",i,ar[i]);

     }

}

 

 ar[0]=2048

ar[1]=4

ar[2]=34603536

ar[3]=4198834

ar[4]=4222976


쓰레기 값이 출력됨


전역으로 선언하면 배열은 0으로 초기화 된다


만약 관련 배열을 초기화 하고 싶다면 


for (i=0;i<5;i++) ar[i]=0;

for (i=0;i<5;i++) ar[i]=i;


와 같이 값을 초기화 해야 하며, 비규칙적인 값일 경우, 따로 따로 입력을 해주어야 한다.


1차원 배열 초기화


  type 배열명[크기]={초기화 값들};

  int ar[5]={4,8,3,69,-7};



배열 초기화에 사용되는 = 기호는 연산자가 아니며, 배열 요소 전체의 값을 한번에 대입할 수 없다.



배열의 초기식

int arBig[1000]={1,2,3,0,0,0,0,0, .............. 997개의 0 };

   ▽

int arBig[1000]={1,2,3};


 

int arBig[1000];

int arBig[1000]={0};

int arBig[1000]={0,};


1번은 쓰레기값으로 채워지고, 2번 3번은 0으로 초기화 된다.


일정 부분만 3으로 초기화 하고 싶은 경우


int arBig[1000]={0,};

arBig[912]=3;


int ar[5]={4,8,3,69,-7,1};

    -> 초기화 개수를 넘어가는 경우는 에러 처리 됨

이럴 경우는 다음과 같이 사용하는 것이 더 효율적인다.


int ar[]={4,8,3,69,-7};


배열 크기와 초기값이

결과

 맞으면

만사 형통

초기값이 모자라면

나머지는 모두 0

초기값이 남으면

에러로 처리됨

배열 크기를 생략하면

개수만큼 자동으로 크기 설정



2차원 배열의 초기화


  1. 개수가 딱 맞는 경우


int ar[2][3]={1,2,3,4,5,6};


 int ar[2][3]={

      {1,2,3},

      {4,5,6},

 };


  2. 초기값이 모자랄 때


  -> 세개다 동일한 결과


int ar[2][3]={{1},{4,5,6}};

int ar[2][3]={{1,0,0},{4,5,6}};

int ar[2][3]={{1,},{4,5,6}};


이 선언문에 의해 ar 배열은 다음과 같이 초기화된다.


int ar[2][3]={1,4,5,6};

순서대로 기입되고 남는 부분은 0 으로 들어감


3. 초기값 개수가 남는 경우

int ar[2][3]={{1,2,3},{4,5,6,7}};

int ar[2][3]={{1,2},{4,5,6,7}};


Error 발생


4. 배열 크기를 생략하는 방법

int ar[][3]={{1,2,3},{4,5,6}};

  -> 

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

   -> 4행이 될 것이다.