CS/C

20240109 C - 2차원 배열

싹난 감자 2024. 1. 10. 09:33
#include <stdio.h>

void PrintArray2D(int _arr2d[][3]);


// Literal Constant
#define ROW_CNT 2
#define COL_CNT 5

int main() {
	//다차원 배열(Multidimensional Arrays)
	//int arr[행][열], row, column
	int arr2d[ROW_CNT][COL_CNT] = { { 11, 12, 13 }, { 21, 22, 23 } }; //2차원 배열을 초기화 할때는 열 정보는 반드시 있어야한다 초기화개수로 자동으로 만들어지지 않는다
	//2차원 배열이여도 메모리에 저장되는 방식은 1차원배열과 같기 때문에 괄호 구분없이 숫자로만 초기화 해도 알아서 된다

	for (int row = 0; row < ROW_CNT; ++row) {
		for (int col = 0; col < COL_CNT; ++col) {
			printf("arr[%d][%d]: %d (%p)\n", row, col, arr2d[row][col], &arr2d[row][col]);
		}
	}

	printf("arr2d Size: %d Byte\n", sizeof(arr2d));
	printf("arr2d[0][4]: %d (%p)\n", arr2d[0][4], &arr2d[0][4]);
	//행은 그대로 두고 열만 이동해도 메모리는 1차원으로 저장되어 있기 때문에 그만큼 이동한 위치의 값이 나온다
	printf("arr2d: %p\n", arr2d);

	printf("arr2d[1]: %p\n", arr2d[1]);

	PrintArray2D(arr2d);
	return 0;
}

void PrintArray2D(int _arr2d[][3]) { // 함수에 배열을 전달할 때 전달되는건 첫 주소 뿐이여서 길이를 맞춰봤자 의미가 없고 맞출 수도 없다
	for (int row = 0; row < ROW_CNT; ++row) {
		for (int col = 0; col < COL_CNT; ++col) {
			printf("_arr2d[%d][%d]: %d\n", row, col, _arr2d[row][col]);
		}
	}
	printf("_arr2d: %p\n", &_arr2d);
	printf("_arr2d[1]: %p\n", _arr2d[1]);

}

'CS > C' 카테고리의 다른 글

20240109 C - Lower, Upper, Swap과 예외처리 문제  (1) 2024.01.10
20240109 C - 구조체  (1) 2024.01.10
20240109 C - 문자열  (0) 2024.01.10
20240105 C - 반복문  (1) 2024.01.08
20240108 C - 함수  (0) 2024.01.08