배열이 필요한 이유
아래와 같이 크기가 같은 변수를 나열해서 적는 것이 불편하기 때문에 같은 크기의 변수들을 묶어서 사용한다.
-> char data1, data2, data3, data4
만약 char data1 [4], data2[4], data3[4], data4[4], data5[4]와 같은 경우가 있다면
5개의 일차원 배열들은 char[4]를 공통적으로 가지고 있음으로 배열을 이용하여 묶을 수 있다.
char data [5] [4]
자료형 변수이름 [행의 개수] [열의 개수]
char [5][4];
이때 앞에 있는 [ ]는 group의 개수를 의미하고 (수학적으로는 y축)
뒤에 있는 [ ]는 항목의 개수를 의미한다. (수학적으로 x축)
[0][0] | [0][1] | [0][2] | [0][3] |
[1][0] | [1][1] | [1][2] | [1][3] |
[2][0] | [2][1] | [2][2] | [2][3] |
[3][0] | [3][1] | [3][2] | [3][3] |
[4][0] | [4][1] | [4][2] | [4][3] |
왜 y축, x축 순서인가?
-> 연산자 우선순위 때문
동일한 우선순위를 가진다면 왼쪽에서 오른쪽으로 연산을 실행한다.
컴파일할 때는 2차원 배열들은 전부 1차원 형태로 변환된다.
[0][0] | [0][1] | [0][2] | [0][3] | [1][0] | [1][1] | [1][2] | [1][3] | [2][0] | [2][1] | [2][2] | [2][3] | [3][0] | [3][1] | [3][2] | [3][3] | [4][0] | [4][1] | [4][2] | [4][3] |
2차원 데이터와 1차원 데이터를 서로 변환하는 법
대부분 컴파일러가 2차원 데이터를 1차원 형태의 기계어로 번역해 주지만 수학 공식을 이용할 수 있다.
돌번호 = (행번호-1)*열 개수 +(열번호-1)
행번호 = (돌번호/열 개수)+1
// 이때 몫 +1 임을 주의하자
열번호 = (돌번호%열 개수)+1
//이때 나머지 +1 임을 주의하자
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 |
메모리의 저장되는 형태만 놓고 보면 2차원 배열로 선언한 변수와 1차원 배열로 선언한 변수는 메모리 형태가 같다.
(단 data [m][n], test[l]에서 m*n=l일 때 성립)
2차원 배열을 이용한 바둑알 문제
1차원 배열 바둑판 문제
'공부 > c언어 기초' 카테고리의 다른 글
c언어 오류: #define 과 ; (0) | 2025.02.11 |
---|---|
main 함수가 이미 정의되어 있습니다 해결법 (0) | 2025.02.10 |
C언어: short형 부호 확장 문제 해결 방법 (0) | 2025.02.08 |
C언어 예제:data 배열의 짝수 번 요소에 저장된 값을 합산하는 코드를 작성해 보시오. (0) | 2025.02.06 |
자료형 char를 쓰는 경우, 배열의 끝에 0, \0 을 사용하는 이유 (0) | 2025.02.02 |