36.1 배열
배열
배열은 같은 자료형의 변수를 일렬로 늘여놓은 형태다.
반복문과 결합하여 연속적이고 반복되는 값을 손쉽게 처리할 수 있다.
배열 선언
자료형 배열이름[크기];
자료형 배열이름[크기] = {값, 값, 값};
- 배열은 변수 이름 뒤에
[ ] (대괄호)
를 붙인 뒤 크기를 설정한다. - 배열을 선언하면서 값을 초기화할 때는
{ } (중괄호)
를 사용한다.
#include <stdio.h>
int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 배열을 생성하고 값 할당
printf("%d\n", numArr[0]); // 11: 배열의 첫 번째(인덱스 0) 요소 출력
printf("%d\n", numArr[5]); // 66: 배열의 여섯 번째(인덱스 5) 요소 출력
printf("%d\n", numArr[9]); // 110: 배열의 열 번째(인덱스 9) 요소 출력
return 0;
}
- 배열을 선언하면서 값을 초기화 할 때는 값 개수는 배열의 크기보다 작아도 되지만 크면 안된다.
- ⭐
{ }
를 사용하여 배열에 값을 할당하는 방법은 배열을 선언할 때만 사용할 수 있으며, 이미 선언된 배열에는 사용할 수 없다.
요소
- 배열에 값이 저장된 공간을
요소(element)
라 한다. - 배열에서 각 요소에 접근하려면 배열 뒤에
[ ] (대괄호)
를 사용하여 각 요소의 인덱스를 지정해주면 된다.
배열[인덱스]
- ⭐ 배열의 인덱스는 항상 0부터 시작한다. 따라서 배열 numArr의 첫 번째 요소는 numArr[0[이 된다.
참고) 배열 선언과 배열 인덱스
배열은 선언할 때도, 배열의 요소에 접근할 때도
[ ]
를 사용한다.
같은 기호를 사용하지만 구분해서 생각해야 한다.
배열을 선언할 때[ ]
는 이 변수가 배열이고 크기는 얼마다라고 알려주는 역할이고, 배열을 사용할 때[ ]
는 배열의 요소에 접근하겠다는 뜻이다.
또한, 요소가 0개인 배열은 선언할 수 없다. 배열은 선언할 때 크기는 항상 1 이상이다. 하지만, 배열에 접근할 때 인덱스는 0부터 시작한다. 배열의 인덱스가 0부터 시작하는 이유는 메모리 주소가 0부터 시작하기 때문이다. ⭐⭐ 배열도 포인터이므로 인덱스가 0부터 시작하면 요소 접근과 포인터 연산이 일치하게 된다.
참고) 배열을 선언할 때 크기 생락하기
배열을 선언할 때 값을 초기화한다면 배열의 크기를 생략할 수 있다.
❗ 초기화를 하지 않을 때는 생략할 수 없다.자료형 배열이름[] = {값, 값, 값, 값];
int numArr1[] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 배열의 크기 생략 int numArr2[]; // 컴파일 에러
요소에 값 할당하기
모든 요소 0으로 초기화
- 배열의 모든 요소를 0으로 초기화 하려면 선언 시
{ 0, }
을 할당한다. - 0을 일일이 나열하지 않아도 모든 요소가 0으로 초기화된다.
자료형 배열이름[크기] = {0,};
#include <stdio.h>
int main()
{
int numArr[10] = { 0, }; // 배열의 요소를 모두 0으로 초기화
printf("%d\n", numArr[0]); // 0: 배열의 첫 번째(인덱스 0) 요소 출력
printf("%d\n", numArr[5]); // 0: 배열의 여섯 번째(인덱스 5) 요소 출력
printf("%d\n", numArr[9]); // 0: 배열의 열 번째(인덱스 9) 요소 출력
return 0;
}
배열의 요소에 값 할당하기
배열은 [ ]
로 요소에 접근한 뒤 값을 할당할 수 있다.
배열[인덱스] = 값;
#include <stdio.h>
int main()
{
int numArr[10]; // 크기가 10인 배열 선언
numArr[0] = 11; // 인덱스가 0인 배열의 요소에 값 할당
numArr[1] = 22; // 인덱스가 1인 배열의 요소에 값 할당
numArr[2] = 33; // 인덱스가 2인 배열의 요소에 값 할당
numArr[3] = 44; // 인덱스가 3인 배열의 요소에 값 할당
numArr[4] = 55; // 인덱스가 4인 배열의 요소에 값 할당
numArr[5] = 66; // 인덱스가 5인 배열의 요소에 값 할당
numArr[6] = 77; // 인덱스가 6인 배열의 요소에 값 할당
numArr[7] = 88; // 인덱스가 7인 배열의 요소에 값 할당
numArr[8] = 99; // 인덱스가 8인 배열의 요소에 값 할당
numArr[9] = 110; // 인덱스가 9인 배열의 요소에 값 할당
printf("%d\n", numArr[0]); // 11: 배열의 첫 번째(인덱스 0) 요소 출력
printf("%d\n", numArr[5]); // 66: 배열의 여섯 번째(인덱스 5) 요소 출력
printf("%d\n", numArr[9]); // 110: 배열의 열 번째(인덱스 9) 요소 출력
return 0;
}
-
요소를 출력할 때와 마찬가지로
[ ]
에 인덱스를 지정한 뒤 값을 할당하면 된다. -
배열의 범위를 벗어난 인덱스에 접근하면 배열이 아닌 다른 메모리 공간에 접근하게 된다.
#include <stdio.h>
int main()
{
int numArr[10] = {11, 22, 33, 44, 55, 66, 77, 88, 99, 110}; // 크기가 10인 배열 선언
printf("%d\n", numArr[-1]); // 음수이므로 잘못된 인덱스
printf("%d\n", numArr[10]); // 배열의 범위를 벗어난 인덱스
printf("%d\n", numArr[20]); // 배열의 범위를 벗어난 인덱스
return 0;
}
/*
실행 결과
-858993460 (쓰레기 값)
-858993460 (쓰레기 값)
13651968 (쓰레기 값)
*/
⇨ 인덱스로 음수를 지정하거나, 배열의 크기를 벗어난 인덱스를 지정해도 컴파일 에러가 발생하지 않는다.
⇨ 하지만 실행 시 쓰레기 값이 출력된다.
⇨ 즉, 배열이 아닌 다른 메모리 공간에 접근한 것을 알 수 있다.
- 따라서 배열의 범위를 벗어난 접근을 하여 값을 할당해버리면 엉뚱한 메모리에 값을 저장하게 되어 프로그램이 정상적으로 실행되지 않을 수 있다.
출처
https://dojang.io/mod/page/view.php?id=292
https://dojang.io/mod/page/view.php?id=293
https://dojang.io/mod/page/view.php?id=294
https://dojang.io/mod/page/view.php?id=295
Author And Source
이 문제에 관하여(36.1 배열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shuajjjjj/36.1-배열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)