반응형
포인터는 C 언어에서 매우 중요한 개념으로, 메모리 관리와 효율적인 데이터 처리를 가능하게 합니다. 이번 포스팅에서는 이중 포인터, 함수 포인터, 포인터 배열, 그리고 배열 포인터에 대해 설명하고, 각 주제별로 예제를 제공하겠습니다.
1. 이중 포인터 (Double Pointer)
이중 포인터란?
이중 포인터는 포인터를 가리키는 포인터입니다. 쉽게 말해, 포인터의 주소를 저장하는 포인터입니다. 이중 포인터는 다음과 같은 경우에 유용합니다:
- 다차원 배열을 처리할 때
- 동적 메모리 할당에서 다차원 구조를 구현할 때
- 함수에서 포인터 값을 수정하고자 할 때
문법
int **pp;
위 코드에서 pp
는 이중 포인터로, 포인터 변수의 주소를 저장할 수 있습니다.
예제: 이중 포인터를 활용한 값 변경
#include <stdio.h>
void changeValue(int **ptr) {
**ptr = 20; // 이중 포인터를 사용하여 값을 변경
}
int main() {
int value = 10;
int *p = &value;
int **pp = &p;
printf("Before: %d\n", value);
changeValue(pp);
printf("After: %d\n", value);
return 0;
}
실행 결과
Before: 10
After: 20
2. 함수 포인터 (Function Pointer)
함수 포인터란?
함수 포인터는 함수의 주소를 저장하는 포인터입니다. 함수 포인터를 사용하면 함수를 매개변수로 전달하거나 동적으로 함수 호출을 결정할 수 있습니다.
문법
return_type (*function_pointer_name)(parameter_types);
예제: 함수 포인터를 사용한 함수 호출
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
void operate(int a, int b, int (*operation)(int, int)) {
printf("Result: %d\n", operation(a, b));
}
int main() {
int (*func_ptr)(int, int); // 함수 포인터 선언
func_ptr = add;
operate(10, 5, func_ptr);
func_ptr = subtract;
operate(10, 5, func_ptr);
return 0;
}
실행 결과
Result: 15
Result: 5
3. 포인터 배열 (Array of Pointers)
포인터 배열이란?
포인터 배열은 여러 개의 포인터를 배열 형태로 저장하는 것입니다. 문자열 배열이나 여러 메모리 블록을 다룰 때 유용합니다.
문법
data_type *array_name[array_size];
예제: 문자열 배열
#include <stdio.h>
int main() {
const char *colors[] = {"Red", "Green", "Blue", "Yellow"};
for (int i = 0; i < 4; i++) {
printf("Color[%d]: %s\n", i, colors[i]);
}
return 0;
}
실행 결과
Color[0]: Red
Color[1]: Green
Color[2]: Blue
Color[3]: Yellow
4. 배열 포인터 (Pointer to an Array)
배열 포인터란?
배열 포인터는 배열 전체를 가리키는 포인터입니다. 이 개념은 다차원 배열을 다룰 때 특히 유용합니다.
문법
data_type (*pointer_name)[array_size];
예제: 배열 포인터와 다차원 배열
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int (*p)[3] = matrix; // 배열 포인터 선언
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}
return 0;
}
실행 결과
1 2 3
4 5 6
요약
이번 포스팅에서는 C 언어의 이중 포인터, 함수 포인터, 포인터 배열, 그리고 배열 포인터를 다루었습니다. 각 개념에 대한 정의와 함께 예제를 통해 실전에서 어떻게 활용되는지 알아보았습니다. 포인터는 초보자에게 어려운 주제일 수 있지만, 이를 잘 이해하면 C 언어를 더욱 효율적으로 사용할 수 있습니다.
반응형
'c 언어' 카테고리의 다른 글
C 언어의 표준 라이브러리 (0) | 2024.12.14 |
---|---|
C 언어의 전처리기 (0) | 2024.12.14 |
C 언어의 파일 처리 - 파일 입출력, 파일 포인터 사용법 (0) | 2024.12.14 |
C 언어의 동적 메모리 할당 (0) | 2024.12.14 |
C 언어의 구조체와 공용체 (0) | 2024.12.13 |