특징
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행이 될 것이다.