같은 자료형의 변수 여러개를 묶어 놓은 것.
(이때 우리는 변수 여러개를 묶어 하나의 이름으로 부르는 것 이라고 생각합시다.)
해당 원소 타입의 공간을 정한 개수만큼 붙여서 메모리에 마련해 줍니다.
즉, 위의 경우 a가 선언되면서 [ int | int | int ] 의 크기(4byte * 3)만큼의 공간이 확보됩니다.
이를 이용하면 문자 자료형(char)을 여러개 붙여 문자열을 만드는 것이 가능하겠죠?
변수와 마찬가지로 따로 정의의 과정이 필요하지 않습니다.
어떤 종류의 변수로 이루어진 배열인지, 몇개로 이루어졌는지에 대한 내용을 지정해 줍니다.
int a[3];
double b[3];
- 배열의 크기에는 "반드시" "상수"가 전달되어야 합니다.
- 변수와 마찬가지로 쓰레기 값이 들어가게 되므로 조심합시다.
int a[3];
a[1];
- 배열이름[인덱스]를 통해 배열의 해당 번호에 저장된 값에 접근할 수 있습니다.
- 인덱스는 0번째, 즉, 위의 경우
a[0]
부터 시작합니다. 따라서a[3]
은 존재하지 않습니다. (3개를 만들었으니,a[0]
,a[1]
,a[2]
까지 존재)
- 배열의 이름(
a
)은a[0]
의 주소를 의미합니다.
a[2] = 3;
배열의 형태에 맞는 값을 저장해 주도록 합시다.
int a[3] = {11, 22, 33}; // {11, 22, 33}이 저장
int b[3] = {0}; // {0, 0, 0}이 저장
원소중 하나만 초기화 하면 나머지는 자동적으로 0으로 초기화됩니다.
int a[] = {11, 22, 33}
정의와 동시에 초기화 할 경우 배열의 크기를 지정해 주지 않아도 됩니다.
char c[] = "Hello World!";
char d[3];
d[0] = 'a';
d[1] = 'b';
d[2] = 0;
문자 자료형
char
를 여러개 붙이면 문자열을 만들 수 있습니다.
sizeof(c) / sizeof(c[0])
주의점 숙지: sizeof()함수는바이트 단위로 크기를 구하는 함수 입니다.
ex) int a[3]는 4byte * 3, 즉 결과는 12이다.
1) 배열의 이름은 그 배열의 0번 인덱스의 주소를 의미합니다. 이때 이 값은 "상수"입니다.
2) 1에 의해 배열끼리 대입(복사)하는것은 불가능 합니다.
int a[3];
a = {0, 0, 0}; // a는 a[0]의 주소를 의미하는 상수이므로 대입 불가능
3) 2에의해 초기화는 배열을 정의할때에만 가능합니다.
4) 문자열의 경우 마지막 문자는 반드시 NULL문자('\0')이어야 합니다.
(NULL은 문자열의 끝을 의미합니다. 따라서 '\0'이 없을 경우 그 뒤의 쓰레기 값들이 딸려오게 되기 때문입니다.)
char[1] = 'a'
, 이런식으로 하나하나 문자를 대입할 경우, 마지막에 NULL문자를 입력해 주어야 합니다."Hello World \n"
과 같은 *문자열 상수*의 경우 자동으로 NULL문자가 끝에 첨가되게 되어 있습니다.