C언어에서 배열은 아래와 같은 구조로 선언할 수 있습니다.
int array1[3];
// 3 크기를 가진 array1 이라는 배열
int array2[5] = { 10, 20, 30, 40, 50 };
// 5 크기를 가진 array2 라는 배열에 순서대로 10, 20, 30, 40, 50을 넣은 모습
int array3[] = { 10, 20, 30, 40, 50 };
// 이럴 경우 크기를 생략할 수 있습니다. array2와 같이 값을 무조건 넣어줘야 합니다.
int array4[];
// 오류 발생
일반적으로 배열을 선언할 때에는 크기 (대괄호 안의 숫자)를 반드시 지정해야 합니다.
또 중괄호를 사용하여 배열에 값을 넣을 경우에는 지정한 크기보다 큰 값 개수를 넣어서는 안 됩니다.
예를 들어, array2 배열에는 크기가 5만 할당되어 있으므로 값이 더 들어갈 수 없는 상황입니다.
#include <stdio.h>
int main() {
int array2[5] = { 10, 20, 30, 40, 50 };
printf("%d\n", array2[0]); // 10
printf("%d\n", array2[4]); // 50
return 0;
}
위 코드를 실행시키면 10과 50이 출력될 것입니다.
배열에서 인덱스는 0부터 시작하므로 첫 번째 값을 출력하려면 0을 입력해야 합니다.
(그 이유로, 크기가 0인 배열은 선언할 수 없습니다.)
#include <stdio.h>
int main() {
int zeroArray[100] = { 0, };
printf("%d\n", zeroArray[36]); // 0
printf("%d\n", zeroArray[29]); // 0
printf("%d\n", zeroArray[73]); // 0
return 0;
}
배열에 있는 모든 값을 0으로 초기화하고 싶을 때는 { 0, } 을 사용하시면 됩니다.
일일이 { 0, 0, 0, 0, 0, ... } 을 입력할 필요가 없습니다.
그럼 배열에 있는 값에 접근하고, 수정하는 방법은 어떻게 하면 될까요?
#include <stdio.h>
int main() {
int array2[5] = { 10, 20, 30, 40, 50 };
array2[0] = 4;
array2[4] = 62;
printf("%d\n", array2[0]); // 4
printf("%d\n", array2[4]); // 62
printf("%d\n", array2[72]);
// 오류가 발생하지는 않지만, 배열의 크기를 넘었기 때문에 쓰레기 값이 출력될 것입니다.
return 0;
}
배열을 선언할 때와 마찬가지로 등호와 대괄호를 통해 수정할 수 있습니다.
앞서 말했듯이 배열에서 첫 번째 값은 0입니다. 꼭 기억하세요!
#include <stdio.h>
int main() {
int numArr[5] = { 10, 20, 30, 40, 50 };
printf("%d\n", sizeof(numArr));
printf("%d\n", sizeof(numArr) / sizeof(int));
return 0;
}
위 코드를 실행시킨다면 20, 5가 출력될 것입니다.
sizeof() 함수는 무언가의 크기를 출력하는 함수입니다.
sizeof(int) : 4
sizeof(char) : 1
sizeof(numArr) : 20
여기서 왜 numArr의 크기는 20일까요?
바로 int 형의 변수가 5개 있기 때문입니다.
만약 numArr이 char 형, 크기가 10이라면 10 이 출력 될 것입니다.
#include <stdio.h>
int main() {
int numArr[5] = { 10, 20, 30, 40, 50 };
for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) {
printf("%d\n", numArr[i]);
}
return 0;
}
이렇게 sizeof() 함수를 이용해 배열에 있는 값을 순서대로 만드는 알고리즘을 구현할 수 있습니다.
#include <stdio.h>
int main() {
int numArr[10] = { 10, 20, 30, 40, 50 };
for (int i = sizeof(numArr) / sizeof(int) - 1; i >= 0; i--) {
printf("%d\n", numArr[i]);
}
return 0;
}
반대로, 역순으로 출력하는 알고리즘도 구현이 가능합니다.
지금부터는 2차원 배열에 대해 알아보겠습니다.
2차원 배열은 1차원 배열보다 조금 복잡한 구조를 가지고 있습니다.
먼저 코드를 보겠습니다.
#include <stdio.h>
int main() {
int numArr[3][3] = {
{ 10, 20, 30 },
{ 40, 50, 60 },
{ 70, 80, 90 }
};
// ↓ 세로 인덱스
printf("%d\n", numArr[0][0]); // 10
printf("%d\n", numArr[1][2]); // 60
printf("%d\n", numArr[2][0]); // 70
// ↑ 가로 인덱스
return 0;
}
2차원 배열 선언은 1차원 배열과 비슷하게 이루어져 있습니다.
위의 코드에서는 가로 3칸, 세로 3칸의 배열을 선언한 모습입니다.
똑같이, 각 인덱스에 접근하는 것도 1차원 배열과 유사하게 이루어집니다.
여기서도 첫번째 값은 0으로 시작합니다.
#include <stdio.h>
int main() {
int numArr[3][2] = {
{ 10, 20 },
{ 30, 40 },
{ 50, 60 }
};
printf("%d\n", sizeof(numArr)); // 24
printf("%d\n", sizeof(numArr[0])); // 8
int row = sizeof(numArr[0]) / sizeof(int);
int column = sizeof(numArr) / sizeof(numArr[0]);
printf("%d\n", row); // 2
printf("%d\n", column); // 3
return 0;
}
numArr에는 int 형(4바이트) 변수가 2개, 3세트 있으므로 크기를 출력하면 24가 출력됩니다.
그리고 2차원 배열에서 대괄호를 하나만 사용하여 크기를 출력하면 그 배열의 자료형 × 가로 크기가 출력됩니다.
'🖥️ 프로그래밍' 카테고리의 다른 글
행렬, 테이블을 넘어 그래프로 - Matplotlib (0) | 2022.05.29 |
---|---|
데이터 조작과 분석 + 테이블까지, pandas (0) | 2022.05.23 |
행렬관련 계산을 빠르게, NumPy (0) | 2022.05.17 |
코드 분석 - 포인터와 배열 (0) | 2022.04.17 |
C언어의 첫번째 고비 - 반복문 (for) (0) | 2022.04.04 |