포인터 배열
배열의 요소로 포인터 변수를 가지는 배열 -> 포인터 변수로 이루어진 배열
아래와 같이 선언한다.
int num1 = 1, num2 = 2, num3 = 3;
int *arr[3] = {&num1, &num2, &num3};
포인터 배열의 주소 연산
포인터 배열의 주소 또한 연산이 가능하다. 주소 값을 곱하거나 나눌 수 없으므로 주소 연산은 덧셈과 뺄셈만 가능하다.
#include <stdio.h>
int main() {
int values[] = {10, 20, 30, 40, 50};
// 정수 포인터 배열 선언
int* pointers[5];
// 포인터 배열에 주소 지정
for (int i = 0; i < 5; ++i) {
pointers[i] = &values[i];
}
// 포인터 배열 출력
printf("주소, 값:\n");
for (int i = 0; i < 5; ++i) {
printf("pointers[%d] = %p, value = %d\n", i, (void*)pointers[i], *pointers[i]);
}
// 포인터 연산을 통한 주소 덧셈과 뺄셈
printf("\n주소 연산:\n");
// 포인터 덧셈: pointers[0] + 2
int* ptr_add = pointers[0] + 2;
printf("pointers[0] + 2 = %p, value = %d\n", (void*)ptr_add, *ptr_add);
// 포인터 뺄셈: pointers[3] - 1
int* ptr_sub = pointers[3] - 1;
printf("pointers[3] - 1 = %p, value = %d\n", (void*)ptr_sub, *ptr_sub);
return 0;
}
복잡한 포인터 사용
#include <stdio.h>
typedef int(*FUNC) (int,int);
int add(int a, int b) {
return a + b;
}
int substract(int a, int b) {
return a - b;
}
// (int,int)를 받아 int를 리턴하는 포인터 calc 미리 선언
FUNC calc(FUNC fp[], int arr_size) {
return fp[0];
}
// int (*(calculator(int (*fp[])(int, int), int arr_size)))(int, int) //
/*
* 1. int (*fp[])(int, int)
* (int,int)를 매개변수로 받아 int를 반환하는 함수포인터의 배열
*
* 2. *(calculator(int (*fp[])(int, int), int arr_size))
* 1번과 1번의 size를 입력 받아 1번(함수포인터 배열)에 저장되어있는
* 각 함수를 반환하는 함수포인터
*
* 3. 2번(함수포인터 -> 각 함수의 주소를 가지고 있음)에
* (int,int)를 입력받아 int를 반환
*/
int main() {
// 1번 function pointer의 배열 선언
FUNC functions[] = {add, substract};
// 위에 선언한 2번을 받아 계산을 수행하는 3번 변수
FUNC const operation = calc(functions, 2);
int result = operation(2, 3);
printf("%d\n", result);
return 0;
}'Automotive > C' 카테고리의 다른 글
| [C/C++] 문자열 포인터 (2) | 2024.07.26 |
|---|---|
| [C/C++] Pointer 및 Const (1) | 2024.07.24 |