关于函数指针,函数指针数组以及函数指针数组的用途(计算器实现)

    xiaoxiao2022-07-12  136

    在之前的学习中我们已经知道了,数组是一个存放相同类型数据的存储空间,而指针数组就是一个用来存放指针变量的数组,比如: int* arr[10]; //数组的每个元素是int* 既然有了指针数组,那么我们能不能把函数的地址也都存到一个数组当中去?答案是肯定的,这样的一个数组就叫做函数指针数组,比如: int (*parr[10])(); parr首先与[]结合表示一个数组名,这也就说明parr是数组,而数组的内容是 int (*)()类型的指针(也就是函数指针) 接下来看函数指针数组的运用,这里我们使用函数指针数组来实现一个计算器,在此之前,我们先来看不使用函数指针数组的计算器

    #include <stdio.h> #include <stdlib.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){ if (y != 0){ return x / y; } } int main(){ int input; int x, y; int ret = 0; while(1){ printf("*****************************\n"); printf(" 1. Add 2.Sub \n"); printf(" 3. Mul 4.Div \n"); printf("*****************************\n"); printf("请选择: "); scanf("%d", &input); switch(input){ case 1: printf("请输入操作数: "); scanf("%d %d", &x, &y); ret = Add(x, y); break; case 2: printf("请输入操作数: "); scanf("%d %d", &x, &y); ret = Sub(x, y); break; case 3: printf("请输入操作数: "); scanf("%d %d", &x, &y); ret = Mul(x, y); break; case 4: printf("请输入操作数: "); scanf("%d %d", &x, &y); ret = Div(x, y); break; default : printf("您的选择有误!\n"); break; } system("cls"); printf("ret = %d\n", ret); } system("pause"); return 0; }

    接下来使用函数指针数组去实现计算器的功能:

    #include <stdio.h> #include <stdlib.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){ if (y != 0){ return x / y; } } int main(){ int input; int x, y; int ret = 0; int (*p[5])(int x, int y) = { 0, Add, Sub, Mul, Div }; //转移表 while(1){ printf("*****************************\n"); printf(" 1. Add 2.Sub \n"); printf(" 3. Mul 4.Div \n"); printf("*****************************\n"); printf("请选择: "); scanf("%d", &input); if ((input > 0) && (input < 5)){ printf("请输入两个操作数: "); scanf("%d %d", &x, &y); ret = (*p[input])(x, y); } else { printf("您的输入有误!\n"); } system("cls"); printf("ret = %d\n", ret); } system("pause"); return 0; }

    上面所提及的其实也是函数指针的一个用法,就是函数指针指向一个函数,而在此基础上扩展为函数指针数组(转移表). 除此之外,函数指针可以作为函数返回值出现,比如:

    #include <stdio.h> #include <stdlib.h> int Add(int x, int y){ return x + y; } //函数fn的返回值为指针(指向函数 int xx(int a, int b)的指针) int (*fn(int n))(int a, int b){ printf("fn: n = %d\n", n); return Add; } int main(){ int value = fn(100)(3, 9); printf("%d\n", value); system("pause"); return 0; }

    函数指针作为函数参数出现

    #include <stdio.h> #include <stdlib.h> int Add(int x, int y){ return x + y; } //函数指针作为函数参数出现 void test(int a, int b, int (*p)(int, int)){ printf("%d\n", p(a, b)); } int main(){ test(3, 9, Add); system("pause"); return 0; }
    最新回复(0)