-> 선언과 초기화를 동시에 진행할 때는 배열의 크기를 입력하지 않아도 된다.(위 2번의 경우)
-> 배열의 모든 요소를 간단하게 0으로 초기화한다.(위 4번의 경우)
주의
배열을 선언하면서 값을 초기화할 때는 { } 안의 값 개수는 배열의 크기보다 작아도 되지만, 절대 크면 안 된다.
또한, { }를 사용하여 배열에 값을 할당하는 방법은 배열을 선언할 때만 사용할 수 있으며 이미 선언된 배열에는 아래와 같은 방법으로 값을 할당해야 한다.
int main()
{
int arr[5];
arr[0] = 3;
arr[2] = 1;
return 0;
}
배열에 값이 저장된 공간을 요소(element)라고 한다.
배열에서 각 요소에 접근하려면 배열 뒤에 [ ]를 사용하며 [ ] 안에 각 요소의 인덱스를 지정해주면 된다.
여기서 주의할 점은, 배열의 인덱스는 항상 0부터 시작한다는 점이다.
따라서 배열 arr의 첫 번째 요소는 arr[0]이 된다.
🤔 배열의 범위를 벗어난 인덱스에 접근하면 어떻게 될까?
입력
int main()
{
int arr[5] = { 0, };
printf("%d\n", arr[-1]); // 잘못된 인덱스(음수)
printf("%d\n", arr[5]); // 배열의 범위를 벗어난 인덱스
}
출력
-858993460 (쓰레기 값)
13651968 (쓰레기 값)
배열의 요소에 접근할 때 인덱스로 음수를 지정하거나, 배열의 크기를 벗어난 인덱스를 지정해도 컴파일 에러가 발생하지 않는다.
하지만 실행을 해 보면 쓰레기 값이 출력된다.
즉, 배열의 범위를 벗어난 인덱스에 접근하면 배열이 아닌 다른 메모리 공간에 접근하게 된다.
입력
#include <stdio.h>
int main()
{
int decimal = 0;
int binary[4] = { 1, 1, 0, 1 };
int position = 0;
for (int i = sizeof(binary) / sizeof(int) - 1; i >= 0; i--)
{
if (binary[i] == 1)
decimal += 1 << position; // 비트 연산자가 우선됨.
position++;
}
printf("%d\n", decimal);
return 0;
}
출력
13
입력
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int numArr[5];
int smallestNumber;
scanf("%d %d %d %d %d", &numArr[0], &numArr[1], &numArr[2], &numArr[3], &numArr[4], &numArr[5]);
smallestNumber = numArr[0];
for (int i = 1; i < sizeof(numArr) / sizeof(int); i++)
{
if (smallestNumber > numArr[i])
smallestNumber = numArr[i];
}
printf("%d\n", smallestNumber);
return 0;
}
출처 : 남재윤, ⌜C언어 코딩 도장⌟, 길벗, 2021