int[] arr1 = new int[3];
// Q. 문법적으로 프로그래머가 다룰 수 있는 변수의 수는? ( ?? = ?? )
// A. arr1[0], arr1[1], arr1[2], arr1 = null.... 이렇게 4개
int[][] arr2 = new int[4][3];
// A. 4*3 = 12개, arr2 = null, arr2[0], arr2[1], arr2[2], arr2[3] --> 총 17개겠지뭐
// 생성순서
// 1. stack메모리에 arr2생성, heap메모리에 0000로 1중배열을 가진 주소값 0xFF11생성, arr2에 주소값 부여
// 2. heap메모리에 000 배열이 총4개가 생성됨 (0xAA11, 0xBB11, 0xCC11, 0xDD11)
// 3. 0xFF11의 000에 각각 (0xAA11, 0xBB11, 0xCC11, 0xDD11)가 들어가게 됨
-> 참조변수가 또 그 안의 참조변수를 가르키고 있음
arr2[0][2] = 40;
// --> arr2에 접근, [0]의 값에 접근, 그 주소값(0xAA11)에 또 접근해서 2번째값에 40을 넣고있음
arr2[0] = new int [5];
// arr2[0]을 새로운 배열로 재설정하면 주소값이 변하겠지?
// --> 굳이 격자무늬의 표가 아니라 1중배열 3개짜리, 5개짜리, 4개짜리 등등을 만들 수 있단 말임
// --> 내생각 : 2단은 3까지, 3단은 5까지, 4단은 4까지 곱하세요. 이런느낌?
int[][] arr3 = new int[3][];
arr3[0] = new int[3];
arr3[1] = new int[5];
arr3[2] = new int[4]; // 뭐 이런식으로 하는걸 좀 줄였다고 볼수있지?