4. 함수포인터
DESCRIPTION
함수 포인터의 사용법TRANSCRIPT
C언어와포인터 (4)
함수포인터
"완전학습을지향하는" NHN NEXT 정호영
나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
오늘의토픽
- 간단하게함수포인터에대해배워보자.
함수의구성요소
1. 입력 - parameter
2. 함수이름 - foo
3. 출력 - return
int foo(int n, double x) { … return 1; }
함수를구별할 수 있게하는 요소들
1. parameter 의개수, 각각의타입
2. 함수이름 foo = 함수의 코드(인스트럭션)가저장된주소
3. return 타입
int foo(char, double)
함수이름
1. 함수의코드(인스트럭션)가저장된 주소
2. 아마도코드 영역(읽기전용) 일것이다.
3. 생각해보니포인터랑비슷한것같다.
int foo(char, double)
함수이름 = 주소인지확인해보자.
https://gist.github.com/honux77/c44182cdf8e777dc2d38
결과
== Result (VS2013, win7) ==address of foo = 002A10F0address of main = 002A1140address of literal = 002A5878address of global = 002A801Cpointer value in stack = 0046F90Caddress of x = 0046F928pointer value in heap = 0083E2B0계속하려면 아무 키나 누르십시오 . . .
함수이름 = 주소 = 포인터
그럼 포인터변수에함수이름을넣을 수도 있겠네요.
네~ 됩니다.
포인터변수에 함수이름을넣으려면
함수를 구별할 수 있는 형식이어야 할 것 같습니다.
함수를 포인터로 대입하려면 필요한 것들
1. parameter의개수, 타입
2. 함수 코드가 들어있는 곳 주소 (=이름)
3. 리턴 타입
함수의 포인터
1. parameter - double, int
2. 함수의주소 - (*ptr) 에저장
3. 리턴타입 - int
return_type (*function)(arg1, arg2, ...);int (*ptr)(double, int)
https://gist.github.com/honux77/ef2476764669218e5af4
함수 포인터의용도
여러 가지가 있는데 각자 공부합시다.
한 가지만 알아봅니다.
qsort 함수 사용 예제
함수 포인터가 들어있습니다.
저 타입에 맞는 함수를 만들어 봅시다.
https://gist.github.com/honux77/25c55f2264b29568aac7
주의! 헷갈리지말아야 할 것들
?!
int (*ptr)(int);
int *ptr[4];
int (*ptr)[4];
주의! 헷갈리지말아야 할 것들
?!
//int를 parameter로 받고 int를 리턴하는 함수 포인터int (*ptr)(int);
//int 포인터가 4개 있는 int 포인터 배열int *ptr[4];
// 4개짜리 1차원 int 배열의 포인터// 2차원 배열에 대응int (*ptr)[4];
Thank You