Self-Improvement

ARM의 함수 포인터(function pointer) 예제 본문

ARM

ARM의 함수 포인터(function pointer) 예제

JoGeun 2021. 1. 12. 10:48
#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를 호출하고 있다.