포인터 배열은 여러 개의 포인터를 하나의 배열로 관리할 수 있게 해주는 C/C++의 강력한 기능입니다. 이 글에서는 일반 배열부터 시작해 정수형 포인터 배열, 문자열을 저장하는 포인터 배열까지 단계별로 살펴보겠습니다.
기본 배열 예제
먼저 3개의 정수를 저장하는 일반적인 배열의 사용 예를 살펴보겠습니다.
C 언어 예제
#include <stdio.h>
const int MAX = 3;
int main () {
int var[] = {10, 100, 200};
int i;
for (i = 0; i < MAX; i++) {
printf("Value of var[%d] = %d\n", i, var[i]);
}
return 0;
}실행 결과
Value of var[0] = 10 Value of var[1] = 100 Value of var[2] = 200
C++ 예제
#include <iostream>
using namespace std;
const int MAX = 3;
int main () {
int var[] = {10, 100, 200};
int i;
for (i = 0; i < MAX; i++) {
cout<<"Value of var"<<i<<"="<<var[i]<<"\n";
}
return 0;
}실행 결과
Value of var0=10 Value of var1=100 Value of var2=200
정수형 포인터 배열 선언하기
int나 char 등 특정 데이터 타입에 대한 포인터들을 저장하는 배열이 필요한 경우가 있습니다. 정수형 포인터 배열은 다음과 같이 선언합니다.
선언 문법
int *ptr[MAX]
위 선언은 ptr을 MAX개의 정수형 포인터로 이루어진 배열로 정의합니다. 즉, ptr의 각 요소는 int 값에 대한 포인터를 저장합니다. 다음 예제는 세 개의 정수를 포인터 배열에 저장하여 활용하는 방법을 보여줍니다.
C 언어 예제
#include <stdio.h>
const int MAX = 3;
int main () {
int var[] = {10, 100, 200};
int i, *ptr[MAX];
for (i = 0; i < MAX; i++) {
ptr[i] = &var[i]; /* 정수의 주소를 할당 */
}
for (i = 0; i < MAX; i++) {
printf("Value of var[%d] = %d\n", i, *ptr[i]);
}
return 0;
}실행 결과
Value of var[0] = 10 Value of var[1] = 100 Value of var[2] = 200
C++ 예제
#include <iostream>
using namespace std;
const int MAX=3;
int main () {
int var[] = {10, 100, 200};
int i, *ptr[MAX];
for (i = 0; i < MAX; i++) {
ptr[i] = &var[i]; /* 정수의 주소를 할당 */
}
for (i = 0; i < MAX; i++) {
cout<<"Value of var"<<i<<"="<<*ptr[i]<<"\n";
}
}실행 결과
Value of var0=10 Value of var1=100 Value of var2=200
문자열 목록 저장하기
포인터 배열은 문자열 목록을 저장할 때도 유용하게 사용됩니다. 문자형 포인터 배열을 활용하면 여러 개의 문자열을 효율적으로 관리할 수 있습니다.
C 언어 예제
#include <stdio.h>
const int MAX = 4;
int main () {
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali"
};
int i = 0;
for (i = 0; i < MAX; i++) {
printf("Value of names[%d] = %s\n", i, names[i]);
}
return 0;
}실행 결과
Value of names[0] = Zara Ali Value of names[1] = Hina Ali Value of names[2] = Nuha Ali Value of names[3] = Sara Ali
C++ 예제
#include <iostream>
using namespace std;
const int MAX=4;
int main () {
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali"
};
int i = 0;
for (i = 0; i < MAX; i++) {
cout<<"Value of names"<<i<<"="<<names[i]<<"\n";
}
return 0;
}실행 결과
Value of names0=Zara Ali Value of names1=Hina Ali Value of names2=Nuha Ali Value of names3=Sara Ali
마무리
포인터 배열은 int *ptr[MAX]처럼 선언하여 각 요소가 개별 변수의 주소를 가리키도록 구성할 수 있으며, char *names[] 형태로 선언하면 문자열 목록을 손쉽게 관리할 수 있습니다. 메모리를 효율적으로 활용하고 코드의 유연성을 높이고 싶다면 포인터 배열의 활용을 적극 고려해 보시기 바랍니다.