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
계속하려면 아무 키나 누르십시오 . . .
이와 같은 결과를 출력한다.