본문 바로가기
  • 시간(時間)을 아끼는 방법은 시간을 낭비하지 않는것


C_ language/C언어 심화_모각코

C언어_심화_2차원 배열

by pk7912 2022. 5. 6.
728x90
728x90

커뮤니티_모각코 (모여서, 각자, 코딩) 활동을 하면서 배운 내용을 되새기며 쓴 글입니다.

코딩을 배우고 싶다면 코뮤니티 활동을 적극 추천합니다.

https://cafe.naver.com/codeuniv 

 

코딩 커뮤니티 - 코뮤니티 [파이썬/... : 네이버 카페

코뮤니티 [코딩공부/독학/스터디/대외활동] : python, C언어, java, 자바스크립트, HTML, CSS, 웹/앱개발

cafe.naver.com

 

 


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차원 배열에 대해 다시 공부한 걸로 만족합니다.

다음에 프로그램 만들 때에 꼭 활용해보겠습니다.

 

 

댓글