Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- C++
- 환경설정
- 우분투
- ros
- publish
- 그랑사가
- topic
- while
- 마리아 DB
- 반복문
- Subscribe
- 오늘도 우라라 펫
- mysql
- 프로그래밍
- 오늘도 우라라 공략
- C언어
- ubuntu
- 토픽
- Linux
- install opencv-4.4.0 on ubuntu 22.04
- 오늘도 우라라 펫 공략
- 리눅스
- 기초
- JungOl
- LeetCode
- MSG
- 오늘도 우라라
- 등차수열
- 데이터 베이스
- mariaDB
Archives
- Today
- Total
하루의 쉼터
[BasicGrammar] FunctionPointer(함수포인터) - with. c++ 본문
반응형
함수의 주소는 함수에 해당하는 기계의 코드가 저장되어 있는 메모리 블록의 시작 주소.
주요 사용처
- 콜백함수 : 이벤트 핸들러, 인터럽트 핸들러, GUI 이벤트 처리를 위해 함수를 호출하기 위해서는 함수의 주소 값을 알아야하는데 이때 함수포인터를 사용하여 콜백 함수를 구성하게 된다. 이때 콜백함수의 매개변수, 반환 타입을 정의하여 사용한다.
- 함수포인터 배열 : 함수포인터를 배열로 선언하여 다양한 함수를 동적으로 저장하고 사용 가능하다.
- 동적로딩 : 라이브러리에서 함수 호출이 가능하며, 런타임 시 필요한 라이브러리를 로드하고 사용가능하다.
- 코드 재사용 : 다른 함수의 일부 기능을 함수포인터로 사용하여 재사용성을 높일 수 있다.
사용법 테스트)
#include <iostream>
int think() {
int num = 3;
std::cout << "think" << std::endl;
return 3;
};
double pam_origin(int num) {
return static_cast<double>(num);
};
int pam_a(int num) {
return num;
}
double pam_b(double num) {
return num;
}
double (*pf)(int num);
void estimate(int lines, double(*pf)(int)) {
std::cout << "estimate" << std::endl;
}
int main() {
std::cout << think << std::endl; // think의 주소값 전달
std::cout << think() << std::endl; // think의 리턴값 전달
pf = pam_origin;
// pf = pam_a; 반환형식이 달라서 안됨.
// pf = pam_b;매개변수 달라서 안됨.
estimate(50, pam_origin);
double x = pam_origin(4);
double y = (*pf)(5); //pam_origin 호출
double z = pf(5); //pam_origin 호출
return 0;
};
사용 예제)
#include<iostream>
double robot(int lns);
double changun(int lns);
void estimate_test(int lines, double(*pf)(int));
int main() {
int code = 0;
std::cout << "필요한 코드의 행 수를 입력하십시오 : ";
std::cin >> code;
std::cout << "robot의 시간 예상 : ";
estimate_test(code, robot);
std::cout << std::endl;
std::cout << "changun의 시간 예상 : ";
estimate_test(code, changun);
return 0;
}
double robot(int lns){
return 0.05 * lns;
}
double changun(int lns)
{
return 0.03*lns;
}
void estimate_test(int lines, double(*pf)(int)){
std::cout << lines << "행을 작성하는데 걸리는 시간은 : ";
std::cout << pf(lines) << " hour 걸립니다." << std::endl;
}
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[UtilitiesLibrary] std::size_t - with unsigned int (0) | 2023.04.27 |
---|---|
[BasicGrammar] Inline Function (0) | 2023.04.18 |
[Error] error: no matching function for call to ‘std::basic_ifstream<char>::open(std::__cxx11::string&)’ (0) | 2022.01.19 |
[Error] terminate called after throwing an instance of 'std::logic_error' (0) | 2021.08.10 |
[LinkError] gcc 이용하여 pthread 컴파일 (0) | 2021.05.14 |
Comments