天天看點

用函數數組指針來實作電腦的功能(簡易模式)(不過稍微改改也能算比較複雜的)

廢話不多說,直接上代碼(想要看解析往下拉)(記得點贊呦~~~)

#include <stdio.h>
int add(int x, int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int mul(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return x / y;
}

int main()
{
	int a = 0;
	int (*output[4])(int, int) = { add,sub,mul,div };
	printf("是否進入四則運算模式\n");
	printf("*****1       是*****\n");
	printf("*****0       否*****\n");

	scanf("%d", &a);
	int b = 0;
	int c = 0;
	int d = 0;

	while (a)
	{
		printf("**************************\n");
		printf("*1  add**********2  sub***\n");
		printf("*3  mul**********4  div***\n");
		printf("**************************\n");
		printf("請選擇\n");
		scanf("%d", &b);
		printf("請輸入計算的兩個值\n");
		scanf("%d%d", &c, &d);
		int e = 0;

		e = (output[b - 1])(c, d);
		printf("%d\n", e);
		printf("是否繼續\n");
		printf("*****1       是*****\n");
		printf("*****0       否*****\n");
		scanf("%d", &a);
	}

	return 0;
}
           

其實整個代碼塊并不算多難了解,有興趣的可以看看我寫的掃雷(比這稍微複雜點,但與比賽相比差遠了)。它的思路很簡單,就是構造一個函數指針數組,然後把4個函數放到裡面去,再在想用的時候把它調用出來。

是以說,問題的關鍵在于了解這個函數指針數組。即這個東西:    int (*output[4])(int, int) = { add,sub,mul,div };  當然這東西對于大佬來說很簡單啦~

實際上,由它的名字,函數指針數組,它是一個數組(中心語也就是主語,是數組),是以,在這個數組裡,有四個函數的位址,分别是add,sub,mul,sub,注意是這四個函數的位址,由指針去接受,也就形成了函數指針數組這麼個說法。說白了,它就是一個數組,數組的元素是函數的位址罷了。

這樣,我們就可以根據所輸入的數,用數組下标對其進行通路,進而實作不同種的算法。

值得指出的是,在調用函數的過程中        

e = (output[b - 1])(c, d);-----------這麼寫是對的

 e = (*output[b - 1])(c, d);-----------這麼寫也是對的

不信你可以試試。

理由很簡單,函數本身就可以表示一種位址 

就好像

printf("%d\n",(*pa)(2,3));    和       printf("%d\n", pa(2, 3));  都是對的

printf("%d\n",add);       和              printf("%d\n,&add);也都是對的

還是那句話,

不信,你可以試試。

覺着說的有理就高擡貴手,點個小贊吧~~~~~~~~~

繼續閱讀