////////————————6.函数指针数组
//////函数指针数组
//////数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组,
//////比如:int* arr[10];数组的每个元素是int*
//////那要把函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?
//int (*parr1[10])();
////答案是:parr1
////parr1 先和[] 结合,说明 parr1是数组,数组的内容是int (*)() 类型的函数指针。
//#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(*p)(int, int) = Add;//p为函数指针,int(*)(int,int)为函数指针类型
// int(*arr[4])(int, int) = {Add,Sub,Mul,Div};//arr是函数指针的数组
// //Add, Sub, Mul, Div分别为下标0,1,2,3的数组元素。并且这四个元素分别能找到他们对应的函数,
// // 因此在访问函数指针数组元素的时候,其实能够找到这些函数的地址,然后就可以调用这些函数
// int i = 0;
// for (i = 0; i < 4; i++)
// {
// int ret = arr[i](8,4);//随着i的增加,可以访问所有的数组元素,并调用函数。
// //此处的arr[i]可以换成*arr[i],并且arr[i]等同于函数
// printf("%d\n",ret);
// }
// return 0;
//}
////////计算器(引用函数指针数组)
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//int menu()
//{
//
// printf("*************************\n");
// printf(" 1:add 2:sub \n");
// printf(" 3:mul 4:div \n");
// printf("*************************\n");
// return 0;
//}
//int add(int a, int b)
//{
// return a + b;
//}
//int sub(int a, int b)
//{
// return a - b;
//}
//int mul(int a, int b)
//{
// return a * b;
//}
//int div(int a, int b)
//{
// return a / b;
//}
//int main()
//{
// int x, y;
// int i = 1;
// int ret = 0;
// int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表:提供跳转的功能
// //由于菜单本设计中,我们设置的函数均有对应数字,所以要仔细考虑到上述问题,
// // 因此,数组元素设置为5个,并且,add的下标遵循菜单栏的设计进行更改,使其下标为1
// //i之所以初始值为1,add的下标对应只是原因之一,第二个原因是,while()语句,
// // ()里为不为0的数才会执行,因此i的初始值就没使用1
// while (i)
// {
// menu();
// printf("请选择:");
// scanf("%d", &i);
// if ((i <= 4 && i >= 1))
// {
// printf("输入操作数:");
// scanf("%d %d", &x, &y);
// ret = (*p[i])(x, y);
// }
// else
// printf("选择错误\n");
// printf("ret = %d\n", ret);
// }
// return 0;
//}
////////——————————————7.指向函数指针数组的指针
////指向函数指针数组的指针是一个指针
////指针指向一个数组 ,数组的元素都是函数指针;
//#include<stdio.h>
//void test(const char* str)
//{
// printf("%s\n", str);
//}
//int main()
//{
// //函数指针p
// void (*p)(const char*) = test;
// //函数指针的数组pArr
// void (*pArr[5])(const char* str);
// pArr[0] = test;
// //指向函数指针数组pArr的指针ppArr
// void (*(*ppArr)[5])(const char*) = &pArr;
// return 0;
//}
标签:arr,return,int,28,C语言,初学,数组,printf,函数指针 From: https://blog.51cto.com/KKhahaha/8843169