일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 올리비아 스텐 세면대 세트
- 리빙앤트리 펠리컨 박스 대
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- ChatGPT
- 네스파 다야몬드은박 후드티
- ipTIME 유무선공유기
- 두칸 프릴 오버핏 후드티
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 긍정
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- 삼성 갤럭시워치5
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 위드리빙 대용량 옷 수납 방수 바구니
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- 반스 올드스쿨 VN000D3HY28
- 샤오미 미밴드 7 스마트밴드
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 1개
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 8052 블랙라인 정사각 세면기
- Today
- Total
냥집사의 개발일지
C언어 - 함수 포인터 (Function Pointer) 본문
안녕하세요 오늘은 함수 포인터에 대해 정리해보겠습니다.
배열 포인터, 포인터 배열에 못지않게 헷갈리는 함수 포인터까지 정리하면
어느 정도 C언어의 기본 문법은 이해했다고 볼 수 있겠네요~
2022.09.17 - [C언어] - C언어 - 배열 포인터 (pointer to an array)
2022.09.15 - [C언어] - C언어 - 포인터 배열(array of pointer)
포인터 배열과 배열 포인터에 대해 정리가 필요하시면 이전 포스팅을 참고해보세요~
1. 함수 포인터의 선언 방법
자료형 + (간접 참조 연산자 + 포인터 변수) + (가리킬 함수의 매개변수)
ex) int (*fp)(int), char (*fp)(int, int)
#include <stdio.h>
int add(int x, int y){
return x+y;
}
int main(){
int x = 3;
int y = 7;
int (*fp)(int,int);
fp = add;
printf("x + y : %d\n",fp(x,y));
return 0;
}
fp는 정수형 변수 2개를 매개변수로 삼는 함수를 가리키는 함수 포인터 변수입니다.
정수 2개를 매개변수로 받아 더하는 add 함수를 fp가 가리킵니다.
아래 결과와 같이 fp가 정상적으로 add의 시작 주소를 할당받아 2개의 매개변수가 더해진 것을 확인할 수 있습니다.
Tip1 : 함수명은 함수 정의가 있는 메모리의 시작 주소입니다!!
Tip2 : 함수 포인터에 함수명을 대입하면 함수처럼 호출 할 수 있습니다!!
2. 함수 포인터의 활용
함수 포인터는 대표적으로 App과 Kernel에 함수를 공유할 때 쓰입니다.
(Kernel이란 간단히 말씀드리면 운영체제 中 중요한 부분으로
대표적으로 하드웨어와 응용 프로그램(App) 사이에 인터페이스 역할을 합니다. )
아래 코드는 함수 포인터로 원하는 함수를 호출하는 예제입니다
#include <stdio.h>
int calc_fun(int (*fp)(int, int), int x, int y){
return fp(x,y);
}
int add(int x, int y){
return x+y;
}
int sub(int x, int y){
return x-y;
}
int mul(int x, int y){
return x*y;
}
int div(int x, int y){
if(y == 0){
printf("division by zero");
return 0;
}
return x/y;
}
int main(){
printf("add result : %d\n",calc_fun(add, 6, 3));
printf("sub result : %d\n",calc_fun(sub, 6, 3));
printf("mul result : %d\n",calc_fun(mul, 6, 3));
printf("div result : %d\n",calc_fun(div, 6, 3));
return 0;
}
사칙연산 함수를 만든 후 calc_fun(함수 포인터를 매개변수로 갖는 함수)를 통해 사칙연산의 결과를 출력했습니다.
calc_fun는 함수 포인터와 2개의 정수를 매개변수로 받습니다!!
함수 포인터에 함수명을 대입하면 함수처럼 호출 할 수 있기에
함수 포인터 fp에 2개의 정수 매개변수를 주면 사칙연산을 하게 됩니다!!
오늘은 함수 포인터에 대해 정리해보았습니다.
함수 포인터를 선언하는 방법과 함수 포인터 활용 방법을 알아봤는데요!
결국 핵심은 함수 포인터는 함수명을 대입하여 호출 함수를 결정한다는 것입니다!!
그럼 오늘도 고생 많으셨고 다음 포스팅에서 만나요~
좋은 하루 보내세요
'C언어' 카테고리의 다른 글
C언어 - 메모리 동적 할당 (malloc) (2) | 2022.09.20 |
---|---|
C언어 - void 포인터 (void Pointer) (0) | 2022.09.19 |
C언어 - 배열 포인터 (pointer to an array) (0) | 2022.09.17 |
C언어 - 이중 포인터 (Pointer to Pointer) (0) | 2022.09.16 |
C언어 - 포인터 배열(array of pointer) (0) | 2022.09.15 |