Publish:

태그: , ,

카테고리:


함수 포인터

함수 포인터 : 함수는 메모리의 코드 영역에 저장된다.

  • 함수 주소는 코드 영역에 저장된 함수의 메모리 주소를 의미한다.
  • 함수 포인터는 이런 함수 주소를 저장할 수 있는 변수 타입이다.
  • 반환타입 (*포인터변수명) (인자타입들); 의 형태로 선언한다.
  • 함수 타입은 반환타입, 인자에 영향을 받는다.
  • 반환 타입이나 인자가 다르면 다른 타입으로 인식한다.

```cpp int Sum(int num1, int num2) { return num1 + num2; }

int Minus(int num1, int num2) { return num1 - num2; }

// 위의 두 함수는 같은 타입이라고 볼 수 있다.

int main() { // 함수 포인터 선언 방법 // 반환타입 (*포인터변수명) (인자타입들); 의 형태로 선언한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int (*Func1)(int, int) = nullptr;
void (*Func2)() = nullptr;
void (*Func3)(int) = nullptr;

printf("Size = %d\n", sizeof(Func1));				// 포인터이므로 x64 환경에서 8바이트

// 함수포인터 변수 이름만 빼면 타입이 된다.
printf("Size = %d\n", sizeof(int(*)(int, int)));	

// 함수 이름은 곧 함수 주소이다. (마치 배열처럼)
printf("Address = %p\n", Sum);

// 이 말은 즉 함수 이름으로 포인터 변수에 대입해줄 수 있고
Func1 = Sum;

// 함수의 호출은 함수주소(인자 전달) 의 형태로 호출된다는 것이다.
printf("Func1 Result = %d\n", Func1(10, 20));

Func1 = Minus;
printf("Func1 Result = %d\n", Func1(10, 20));



// 함수 포인터도 배열 선언이 가능하다.
int (*Func1Array[10])(int, int);

Func1Array[0] = Sum;
Func1Array[1] = Minus;

return 0; }

이슈 및 공부한 것을 기록해두는 개인 블로그 입니다. 댓글, 피드백 환영합니다 🙂

Update:

댓글남기기