1 2 3 4 | int arr[3] = {4, 2, 3}; int* p; p = arr; | cs |
위와 같이 선언하고 정의를 하여
포인터 변수를 arr 배열과 같이 사용할 수 있습니다.
하지만 중요한 것은 arr[0]와 p[0]이 같으려면 포인터 변수인 p는
int형 주소를 담는 int* 형이어야 한다는 것입니다.
int 형 메모리를 int* 형 포인터는 다 접근할 수 있다 이겁니다.
그렇다면 2차원 배열을 생각해보도록 하겠습니다.
1 2 3 4 5 | int arr[2][3] = {1,2,3, 4,5,6}; int* p; p = arr; | cs |
2차원 배열도 뭐 까지꺼 똑같이 선언하면 되지 않겠습니까?
아닙니다. 해보세요...
int 형 일차원 배열에서는 int* 형태의 포인터변수가 짝꿍이 었습니다.
하지만 이차원 배열에서는 다릅니다.
지난 시간에 말씀드린 것을 토대로 말씀드리자면,
int arr[2][3]이라는 이차원 배열명 arr은
&a[0]의 주소라고 말씀 드렸습니다.
그러니까 arr은 2덩어리의 데이터를 가지고 있다는 것이고,
arr[0]과 arr[1]은 각각 3개의 int형 배열을 가지고 있는 것이죠.
그렇다는 것은,
int형 변수 3개길이의 배열을 가지고 있으므로 arr[0]은 각각 그 3개의 배열들의 이름이 되죠...
머리아프신가요?
제가 좀 말을 못하는거 같네요... 원래 잘하는데 푸하하...
아니... 그러니까 제말은
int arr[3] 이라는 배열이 있다면,
이 arr 배열이라는 놈의 안에는 int 3개 짜리 배열이 들어있죠?
바꿔 말하자면 int 3개짜리 배열의 이름은 arr 이죠....
별거 없습니다. 여러분. 2차원 배열도 같습니다.
int arr[2][3] 이라는 2차원 배열에는
각각 arr[0]과 arr[1]이라는 놈들이 있는 것이구요
그 놈들은 각각 int 3개짜리의 배열을 가지고 있습니다.
그렇다는것은!!! int 3개짜리의 배열의 이름은 arr[0]과 arr[1]이라고 할 수 있다는 것입니다!!
그말인 즉!
int형 3개 짜리의 배열의 주소는 &arr[0], &arr[1]이 된다는 것이군요!
arr[0]에는 3개짜리의 배열 즉, int [3]이 있지 않습니까?
또 그것들을 가지고 있는 것이 arr이구요...
그러니 즉, 2차원 배열 포인터를 감당하기 위해서는
2차원 배열처럼 동작하는 포인터가 필요합니다.
1차원 배열에서도 맞춰줬듯이 2차원 배열에서도 맞춰줘야
2차원 배열처럼 동작하는 포인터가 완성이 되겠죠.
그러니까~ 2차원 배열처럼 움직이는 것이 같아야된다 이거죠!
이런 int 형식 2차원 배열처럼 동작하는 포인터를 바로 2차원 배열 포인터라고 합니다.
하... 길게 왔네요...
아무튼... 그 포인터를 만들기 위해서는,
1차원 배열 포인터와 같지만 다른 한가지가 있습니다. 바로 열의 개수를 써야되는 것입니다.
1 2 3 4 | int arr[2][3]; int(*pa)[2]; pa = arr; | cs |
이렇게 말입니다... 어때요... 하하하...
어려우면서도 재밌네요...
'삽질의 현장 > - C' 카테고리의 다른 글
곱씹어보자 C!_#018_삽잡이의 두서없이 막말하는 잡다한 것들... (0) | 2015.06.27 |
---|---|
곱씹어보자 C!_#017_삽잡이의 두서없이 막하는 Heap (엉덩이 아님) (0) | 2015.06.27 |
곱씹어보자 C!_#015_삽잡이의 두서없이 막하는 2차원 배열 (0) | 2015.06.26 |
곱씹어보자 C!_#014_ 삽잡이의 두서없이 막하는 예제 코딩 (0) | 2015.06.26 |
[삽잡이::C] 연산자 (0) | 2015.06.25 |