二级域名怎么做网站备案,珠海低价网站建设,网站建设好找工作,营销网络分布图函数指针
定义#xff1a;整型指针是指向整形的指针,数组指针式指向数组的指针,其实函数指针就是指向函数的指针。 函数指针基础#xff1a;
#xff08;#xff09;优先级要高于*#xff1b;一个变量除去了变量名#xff0c;便是它的变量类型#xff1b;一个指针变量…函数指针
定义整型指针是指向整形的指针,数组指针式指向数组的指针,其实函数指针就是指向函数的指针。 函数指针基础
优先级要高于*一个变量除去了变量名便是它的变量类型一个指针变量除去了变量名和*便是指针指向内容的类型。
#includestdio.h
int Add(int x, int y)
{return x y;
}
int main()
{int(*p)(int, int) Add;//取出函数的地址放在函数指针p中return 0;
}函数指针
int *p (int , int) 函数指针的使用
函数指针的赋值 对于数组来说数组名和数组名它们代表的意义不同数组名代表的是数组首元素地址而数组名代表的是整个数组的地址。 但是对于函数来说函数名和函数名它们代表的意义却是相同的它们都代表函数的地址毕竟你也没有听说过函数有首元素这个说法吧。 所以当我们对函数指针赋值时可以赋值为函数名也可以赋值为函数名。 int(*p)(int, int) Add;int(*p)(int, int) Add;通过函数指针调用函数 方法一我们知道函数指针存放的是函数的地址那么我们将函数指针进行解引用操作便能找到该函数了于是就可以通过函数指针调用该函数。
#includestdio.h
int Add(int x, int y)
{return x y;
}
int main()
{int a 10;int b 20;int(*p)(int, int) Add;int ret (*p)(a, b); //解引用找到该函数 printf(%d\n, ret);return 0;
}方法二直接 (*p)(a, b)
int *p;
p Add;
int ret p(a,b) ;函数指针数组
数组是一个存放相同类型数据的空间我们已经认识了指针数组比如 int* arr[10];//数组arr有10个元素每个元素的类型是int*那如果要将一系列相同类型的函数指针存放到一个数组中那么这个数组就叫做函数指针数组比如 int(*pArr[10])(int, int);//数组pArr有10个元素每个元素的类型是int(*)(int,int)函数指针数组的创建只需在函数指针创建的基础上加上[ ]即可。 比如你要创建一个函数指针数组这个数组中存放的函数指针的类型均为int(*)(int,int)如果你要创建一个函数指针为该类型那么该函数指针的写法为int(*p)(int,int)现在你要创建一个存放该指针类型的数组只需在变量名的后面加上[ ]即可int(*pArr[10])(int,int)。 函数指针数组的使用-模拟计算器 函数指针数组一个很好的运用场景就是计算机的模拟实现
#includestdio.h
void menu()
{printf(|-----------------------|\n);printf(| 1.Add 2.Sub |\n);printf(| 3.Mul 4.Div |\n);printf(| 0.exit |\n);printf(|-----------------------|\n);
}//菜单
double Add(double x, double y)
{return x y;
}//加法函数
double Sub(double x, double y)
{return x - y;
}//减法函数
double Mul(double x, double y)
{return x*y;
}//乘法函数
double Div(double x, double y)
{return x / y;
}//除法函数
int main()
{int input 0;double x 0;//第一个操作数double y 0;//第二个操作数double ret 0;//运算结果double(*pArr[])(double, double) { 0, Add, Sub, Mul, Div };//函数指针数组-转移表int sz sizeof(pArr) / sizeof(pArr[0]);//计算数组的大小do{menu();printf(请输入:);scanf(%d, input);if (input 0)printf(退出程序\n);else if (input 0 input sz){printf(请输入两个操作数:);scanf(%lf %lf, x, y);ret pArr[input](x, y);printf(ret%lf\n, ret);}elseprintf(选择错误请重新选择\n);} while (input);//当input不为0时循环继续return 0;
}代码中函数指针数组存放的是一系列参数和返回类型相同的函数名即函数指针。将0放在该函数指针数组的第一位是为了让用户输入的数字input与对应的函数指针下标相对应。 该代码若不使用函数指针数组而选择使用一系列的switch分支语句当然也能达到想要的效果但会使代码出现许多重复内容而且当以后需要增加该计算机功能时又需要增加一个case语句而使用函数指针数组当你想要增加计算机功能时只需在数组中加入一个函数名即可。
指向函数指针数组的指针
既然存在函数指针数组那么必然存在指向函数指针数组的指针。 int(*p)(int, int);//函数指针int(*pArr[5])(int, int);//函数指针数组int(*(*pa)[5])(int, int) pArr;//指向函数指针数组的指针那指向函数指针数组的指针的类型是如何写的呢