Self-Improvement
ARM의 함수 포인터(function pointer) 예제 본문
#include <stdio.h>
int sum(int, int);
int main(void)
{
int (*fp)(int, int) // 함수 포인터 선언
int res;
fp = sum; // 함수명을 함수 포인터에 저장
res = fp(10,20); // 함수 포인터로 함수 호출
printf("result : %d\n", res);
return 0;
}
int sum(int a, int b)
{
return(a+b);
}
var_8에 sum() 주소 값을 넣고 있으며 값을 R3으로 가져와 호출하고 있다.
#include <stdio.h>
void func(int (*fp)(int, int));
int sum(int a, int b);
int mul(int a, int b);
int max(int a, int b);
int main(void)
{
int sel;
printf("1. 두 정수의 합\n");
printf("2. 두 정수의 곱\n");
printf("3. 두 정수 중에서 큰 값 계산\n");
printf("원하는 작업을 선택하세요 : ");
scanf("%d", &sel); // 번호 입력
switch(sel)
{
case 1:func(sum); break; //func 함수를 호출하면서 sum를 매개인자로
case 2:func(mul); break; //func 함수를 호출하면서 mul를 매개인자로
case 3:func(max); break; //func 함수를 호출하면서 max를 매개인자로
}
void func(int (*fp)(int, int)) // 포인터로 인자를
{
int a,b;
int res;
printf("두 정수값을 입력하세요 : ");
scanf("%d%d", &a, &b);
res = fp(a,b); // 함수 포인터로 가리키는 함수를 호출
printf("결과값은 : %d\n", res);
}
int sum(int a, int b)
{
return (a+b);
}
int mul(int a, int b)
{
return (a*b)
}
int max(int a, int b)
{
if (a>b) return a;
else return b;
}
scanf로 부터 받는 buf는 var_8로써 값에 따라 case 문을 수행한다.
함수 포인트(function pointer)를 인자로 주고 func를 호출하고 있다.
scanf로 받은 데이터를 인자로해서 function pointer를 호출하고 있다.
'ARM' 카테고리의 다른 글
** ARM Instruction 설명 (지속적 추가 예정) ** (0) | 2021.01.14 |
---|---|
(*) ARM char, pointer 종합? (LDMIA, STMIA) (0) | 2021.01.14 |
ARM의 포인터(pointer) 사용예제 [R3] (0) | 2021.01.11 |
IDA에서 ARM의 SUB "-" 부분과 스택(stack) 부분 (0) | 2021.01.11 |
ARM - Socket( bind, socket ) 코드 분석 (htons, htonl) (0) | 2020.12.03 |