커뮤니티_모각코 (모여서, 각자, 코딩) 활동을 하면서 배운 내용을 되새기며 쓴 글입니다.
코딩을 배우고 싶다면 코뮤니티 활동을 적극 추천합니다.
https://cafe.naver.com/codeuniv
2차원 배열
일반적으로 (1차원)배열이란 같은 타입의 변수들로 이루어진 집합을 말합니다.
변수가 하나의 요소가되고,
2차원 배열이란 배열 안에 배열을 갖고 있는 배열 자체가 하나의 요소가 되는 집합입니다.
배열과 2차원 배열의 형식
#pragma warning(disable : 4996)
#include <stdio.h>
int main()
{
//int arr1 = {1, 2, 3, 4}; // 1차원 배열
int arr[5][4] = // 2차원 배열에 값을 넣어줘서 선언과 동시에 초기화함
{ // [] 배열의 크기, {} 배열의 값
{ 1, 2, 3, 4 };
{ 5, 6, 7, 8 };
{ 9, 10, 11, 12 };
{ 13, 14, 15, 16 };
{ 17, 18, 19, 20 };
};
for (int i = 0; i < 5; i++) // 2차원 배열을 변수 하나에 묶어 표현
{
for (int j = 0; j < 4; j++) // 2중 for문으로 값 확인
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
배열의 선언과 index
int arr[5][4];
자료형 배열 이름 [세로의 길이][가로의 길이];
자료형 배열 이름 [행인 덱스][열인 덱스];
1 [0][0] | 2 [0][1] | 3 [0][2] |
4 [1][0] | 5 [1][2] | 6 [1][2] |
7 [2][0] | 8 [2][1] | 9 [2][2] |
2차원 배열의 인덱스
배열의 첫 인덱스는 0,0로 시작
2차원 배열의 인덱스를 알면 주소로 배열의 값에 접근할 수 있습니다.
int arr[] = {1, 2, 3, 4};
1차원 배열에서 선언과 초기화를 해줄 때 빈 [ ]로 표현해도 크기를 알아서 할당해주는데
int arr[][] = {{1, 2, 3}, {4, 5, 6}};
2차원 배열은 위처럼 크기를 둘 다 선언해주지 않으면
2차원 배열이 1차원 배열처럼 표현? 한 거처럼 되어서 제대로 알 수가 없습니다.
행과 열 세로와 가로로 표현될 때 행(세로)은 비워도 인식할 수 있지만 열(가로)는 꼭 있어야 합니다.
int arr[3][] = {{1, 2}, {3, 4, 5}, {6, 7, 8, 9}};
// 3행(세로)이라면 이렇게도 표현이 가능하다
// 열(가로)의 배열이 위에처럼 많은 경우의수가 발생한다.
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 3열(가로)이라면 무조건 3ea씩 묶이기때문에 행(세로)도 3개로 정해진다.
2차원 배열의 인덱스는 행과 열로 표현되지만 실제로 메모리에서는 선형으로 할당됩니다.
arr[0][0] | arr[0][1] | arr[0][2] | arr[1][0] | arr[1][1] | arr[1][2] | arr[2][0] | arr[2][1] | arr[2][2] |
(00F5F7E4) (00F5F7E8) (00F5F7EC) (00F5F7F0) (00F5F7F4) (00F5F7F8) (00F5F7FC) (00F5800) (00F5F804)
16진수로 표현_4바이트씩 증가
2차원 배열의 크기를 모를 경우 (sizeof)
1차원 배열과 마찬가지로 sizeof 함수를 이용해서 배열의 크기를 구할 수 있습니다.
#pragma warning(disable : 4996)
#include <stdio.h>
int main()
{
int arr[][4] = { 1,2,3,4,10,20 }; // 2차원 배열 선언과 동시에 초기화
int col = sizeof(arr[0]) / sizeof(int); // arr[0]은 배열의
int row = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf(" %d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
practice
행과 열 바꾸기
숫자 16개를 입력받아 크기가 4X4인 2차원 배열을 구성하고,
행과 열을 바꿔서 출력해봅시다.
int main(void)
{
int arr[4][4];
int col_len, row_len;
col_len = sizeof(arr[0]) / sizeof(arr[0][0]);
row_len = sizeof(arr) / sizeof(arr[0]);
printf("숫자 16개를 입력하시오.\n");
for (int i = 0; i < row_len; i++)
{
for (int j = 0; j < col_len; j++)
{
scanf_s("%d", &arr[i][j]);
}
}
printf("\n\n");
printf("[변경전]\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("\n\n");
printf("[변경후]\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", arr[j][i]);
}
printf("\n");
}
printf("\n\n");
return 0;
}
마무리
코딩을 파이썬으로 입문했는데 정말 아무것도 모르는 상태에서
주식 관련 정보를 크롤링하고 Numpy로 정리하는 강의를 따라 했었는데~
그때 2차원 배열을 접했었습니다.
아직도 다 이해하진 못하지만 정리하면서 2차원 배열에 대해 다시 공부한 걸로 만족합니다.
다음에 프로그램 만들 때에 꼭 활용해보겠습니다.
'C_ language > C언어 심화_모각코' 카테고리의 다른 글
C언어_심화_동적 메모리 할당 (0) | 2022.06.17 |
---|---|
C언어_심화_함수 포인터 (0) | 2022.06.09 |
C언어_심화_2차원 배열과 이중포인터 (0) | 2022.05.26 |
C언어_심화_이중 포인터 (0) | 2022.05.10 |
C언어_심화_구조체 (0) | 2022.05.06 |
댓글