본문 바로가기

C++

[TIL 10장] 2차원 배열

오늘의 TIL 목차 (22.08. 05)

 

  • 2차원 배열

2차원 배열


[ 2차원 배열 ]

: 행 열 개념의 배열

int iArray[2][3] = { 1, 2, 3 }, { 4, 5, 6 };

int	iArray[2][3] = {
	0열 1열 2열
	{ 1, 2, 3 },	// 0행
	{ 4, 5, 6 }	// 1행
};

int	iArray[2][3] = { {1, 2}, {0} }; // 초기화 안된 부분은 0으로 채움

■ 기능 / 주의

  • 2차원 배열은 포인터(이중 포인터 포함)를 사용할 수 없다.
  • int iArray[2][3]은 행을 기점으로 배열의 개수 3개를 갖는 같은 이름 iArray 2개가 겹쳐있는 것이다.
  • iArray[0]은 겹쳐있는 2개의 배열 중 0번째 배열의 시작 주소를, int iArray[1]은 1번째 배열의 시작주소를 출력
  • 1차원 배열은 iArray[i]이 값 출력, 2차원 배열은 iArray[i][j]를 다 써주거나 주소 앞에 * 붙여야만 값 출력
int iArray[2][3] = { {1,8,12}, {4,7,10} };
int(*iArray)[3]; // 2차원 배열의 포인터형 자료형(*배열명)[열];
	cout << iArray[1][1] << endl; // 행 1의 열 1 => 7
	cout << sizeof(iArray) << endl; // iArray의 총 메모리 공간 4byte * 6 = 12byte

	// 2차원 배열은 행 2개가 있다하면 같은 이름의 iArray[0] = {}, iArray[1] = {}; 배열이 2개 겹쳐있는 것
	cout << " ===========" << endl;
	cout << iArray << endl; // 배열 이름 자체가 주소이므로 대표주소 0,0 번지 주소 출력
	cout << iArray + 1 << endl; // 배열 이름은 주소, 2D 배열이므로 다음 행의 주소 출력 (다음 열 X)
	cout << *iArray + 3 << endl; // 시작 주소를 기준으로 열 단위로 주소 이동 출력을 원하면 * 붙이면 됨
	cout << iArray[1] + 2 << endl; // 배열 1번째 행의 0번째 열의 주소에서 + 2 열 주소 출력

	cout << iArray[0] << endl; // 배열 0번째 행의 첫번째 주소 출력
	cout << iArray[1] << endl; // 배열 1번째 행의 첫번째 주소 출력
	cout << *iArray[0] << endl; // 배열 0번째 행의 0번째 값 출력
	cout << *iArray[1] + 1 << endl; // 배열 1번째 행 0번째 값에 1을 더함 (5 출력)

	cout << iArray[0][0] << endl; // 배열 0번째 0의 값 출력
	cout << iArray[0][0] + 1 << endl; // 배열 0번째 0의 값에 +1 더함 (2 출력)