C++ Pointer 3

2차원 배열과 포인터

2차원 배열에서의 포인터 변수는

자료형 (*포인터명)[열의개수];

char (*ptr2)[10];   //ptr2은 열의 개수가 10 인 2차원 배열의 포인터 변수이다.

로 선언한다.

반드시 열의 개수를 명시해 주어야 한다.

행의 개수를 선언하지 않은 이유는 열의 개수만 알고 있다면 첫 번째 항목부터 차례대로 읽어나가면 다음 행을 쉽게 알 수 있기 떄문이다.

그렇다면 2차원 배열에서 행에 대한 접근은 어떻게 할까?

1차원 배열에서 배열의 시작 주소값을 나타내는 포인터에 정수를 더하거나 뺌으로써 다음 요소를 가리킬 수 있다고 배웠다.

마찬가지로 2차원 배열에서는 정수연산 방식으로 다음 행의 주소값을 참조 할 수 있다.

앞서 1차원 배열에서 배열명은 배열의 가장 첫 번째 값을 가리킨다고 배웠다.

여기 2차원 배열에서도 배열명은 배열의 가장 첫 번째 값을 가리킨다.

예를 들어,

int array[2][3];
int (*ptr)[3];

에서

array 는 array 배열의 0행, 0열의 값이 된다. 즉, array[0].

array + 1 은 정수연산을 통해 다음행으로 이동한 것이므로 1행,0열의 값이 된다. 즉, array[1].

array + 2 는 마찬가지로 2를 더해 행을 두번 이동하여 2행,0열의 값이 된다. array[2].

그러면 이제 배열의 모든 항목을 참조할 수 있다.

#include <iostream>

using namespace std;

void sort(int *ptr, int len);

int main()
{
	int array[5] = { 7, 5, 9, 4, 3 };
	int *ptr = array;
	int len = 0;
	int i;

	len = sizeof(array) / sizeof(array[0]);
	for (i = 0; i < len; i++) {
		cout << array[i] << " ";
	}
	cout << endl;
	sort(ptr, len);
	for (i = 0; i < len; i++) {
		cout << array[i] << " ";
	}
	cout << endl;
}

void sort(int *ptr, int len) {
	int i, j, temp;
	for (i = 0; i < len - 1; i++) {
		for (j = 0; j < len; j++) {
			if (*(ptr + i) > *(ptr + j)) {
				temp = *(ptr + i);
				*(ptr + i) = *(ptr + j);
				*(ptr + j) = temp;
			}
		}
	}
}

이 예제 처럼 배열의 포인터를 함수에 넘길 수 있다.

7 5 9 4 3
9 7 5 3 4
계속하려면 아무 키나 누르십시오 . . .

이와 같은 결과를 출력한다.