Self-Improvement

MIP의 함수 포인터(Function pointer) 예제 및 확인 $t9 본문

MIPS

MIP의 함수 포인터(Function pointer) 예제 및 확인 $t9

JoGeun 2021. 1. 12. 09:41
#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);
}

 

단순하게 sum 함수의 주소를 $t9에 MOVE하고 JALR하여 호출하고 있다.

 

 

#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로 부터 받은 값으로 각각 case문을 수행한다.

 

각 case에서는 동일하게 function pointer를 인자로주고 func 함수를 호출하고 있다.

 

func 함수에서는 인자로 받은 function pointer를 scanf로 부터 받은 값을 인자로 주고 $t9를 이용하여 호출하고 있다.