C - 함수 포인터
2022. 3. 11. 16:57ㆍC
함수 포인터에 대해 알아보자
먼저 아래 예제를 통해 함수에도 주소가 존재하는지 알아보자
void hello(){
printf("Hello World\n");
}
int main() {
printf("hello 함수의 주소 값 : %p\n", hello);
}
출력 결과
hello 함수의 주소 값 : 0x102de0f20
주소가 있음을 확인 했으니 우선 반환값과 매개변수가 없는 함수부터 알아보자.
void (*함수포인터이름) (); 형식으로 선언한다..
void hello(){
printf("Hello World\n");
}
void from() {
printf("I'm from Korea.\n");;
}
int main() {
void (*fptr)();
fptr = hello;
fptr();
fptr = from;
fptr();
}
출력 결과
Hello World
I'm from Korea.
먼저 함수 포인터 fptr을 선언해주고 hello함수의 메모리 주소를 함수 포인터 fptr에 저장한다.
함수 포인터로 함수를 호출은 포인터에 ()를 붙여 호출하면 된다.
위의 예제를 통해 함수포인터에 여러 함수를 바꿔가며 사용할 수 있다는 것을 확인할 수 있었다.
반환값과 매개변수가 있는 함수 포인터에 대해 알아보자.
형식은 반환자료형 (*함수포인터이름)(매개변수자료형1, 매개변수자료형2 ....);
int sum(int a, int b){
return a+b;
}
int sub(int a, int b){
return a-b;
}
int main() {
int (*fptr)(int, int);
fptr = sum;
printf("%d\n",fptr(20, 10));
fptr = sub;
printf("%d\n",fptr(20, 10));
}
출력 결과
30
10
int (*fptr)(int, int)의 의미는 반환값의 자료형이 Int이고 int형 매개변수 2개를 받는 함수 sum과 sub를 저장하기 위해 이렇게 선언 했다.
sum함수의 주소 값을 fptr에 저장하고 함수 포인터를 호출하면서 매개 변수에 값 20, 10이 각각 들어가게 된다.
내용정리
-함수 앞에 *를 붙여서 함수포인터를 만들 수 있다.
- 함수포인터에는 함수의 주소값을 저장할 수 있다.
- 반환형의 종류에 따라 반환값이 있거나 없을 수 있다.
'C' 카테고리의 다른 글
C - 구조체 심화 (0) | 2022.03.14 |
---|---|
C - 동적 메모리 할당 (0) | 2022.03.11 |
C - 문자 입출력 라이브러리 (0) | 2022.03.10 |
C - 문자와 문자열 (0) | 2022.03.10 |
C - 구조체 (0) | 2022.03.09 |