이차원 배열 int a[3][3]이 있다 치자
이것을 int **p에다 넣으려고 하면 a를 (int **)로 강제 캐스팅을 해줘야 하더라고 근데
a[0][1]에 있는 숫자를 읽으려면 p[1]로 일게 되더라고.
그래서 왜 그럴까 생각해봤는데 int**로 바꿔도 int[0]에 총 몇개의 int가 있는지 명확히 선언이 안되어있어서
이차원배열로 나눠져있던게 이제 쭉 한줄로 늘어서게 되게 된거지.
그래서 printf("%d", p[1])이 되는거고 맞냐?
p = a; 끝
그렇게 안되 이 호구야 (int**)로 강제 캐스팅해야지 들어감
정보)원래 이차원배열도 한줄로 늘어서있다 - dc Cpp
근데 내가 생각한게 맞냐?
3x3 이차원배열이 결국 9칸짜리 일차원배열이랑 메모리에 위치하는 모양새가 똑같음. 딱히 나눠져있던게 아니란소리 - dc Cpp
그래서 00 01 02 10 11 12 20 21 22 순서대로 각 0 1 2 3 4 5 6 7 8에 대응됨ㅇㅇ - dc Cpp
강제 캐스팅은 아마 C++ 컴파일러로 컴파일 해서 그런거 같네. 원래 C 에서 implicit cast 되었을껄. 그리고 이차원 배열도 메모리상에선 일차임. 예를 들어 a[R][C] 이렇게 선언 되있으면 a[0][1] 는 사실상 a[C*0+1] 과 같음. 그래서 p[1] 이 똑같은 결과를 출력한거고.