wordpress快速仿站教程,给企业做网站前景,appcan wordpress,个人电脑做外网网站#xff08;一#xff09;前文回顾
1、前篇代码分析
void(*signal(int , void(*)(int)))(int) ;
那么这串代码究竟是什么呢#xff1f;
别慌#xff0c;让我们来一步一步拆解#xff0c;首先我们通过之前的学习#xff0c;已经明白了什么是函数指针#xff08;如果有…一前文回顾
1、前篇代码分析
void(*signal(int , void(*)(int)))(int) ;
那么这串代码究竟是什么呢
别慌让我们来一步一步拆解首先我们通过之前的学习已经明白了什么是函数指针如果有不太懂得请看前一篇文章 仔细观察这串代码不难发现出现了 signal 此时肯定会有人想是不是有什么特殊的含义。。。 很明显signal就是简简单单的一个函数名不行来我们轻轻的把这串代码“大卸八块”。 1去掉最外层的 void(int) 剩余 *signal(int , void(*)(int)) ; 现在signal只有两种可能。【1就是指针 2是函数名】 我们之前的学习中已经知道当 * 和同时存在的时候首先于变量名结合所以此处的 signal(int , void(*)(int)) 首先是一部分也就是个函数。 2再来看 signal(int , void(*)(int)) 的内的部分我们发现有个 int这说明函数内有个参数是 int 类型那么剩余的参数 void(*)(int) 是什么类型呢 学过函数指针的朋友不难看出这就是一个函数指针类型的参数。 3再想想* 是什么呢 此时发现不好解释啊但是你把刚开始去掉的外层结构加上再看就会一目了然 void* (int) //这也是个函数指针类型再结合中间部分是个函数我们就能明白整个代码 void(*signal(int , void(*)(int)))(int) ; 的意思是 函数指针类型的函数 二函数指针数组
1、基本知识
1本质 函数指针数组顾名思义就是存放函数指针的一个数组 2示例 int add(int x , int y) //定义一个函数实现两个整数的相加 { return xy; } int sub(int x , int y) //定义一个函数实现两个整数的相减 { return xy; } int main() { int(*pf)( int ,int ) add ; //定义一个函数指针指向 add 函数 int(*pf1)( int ,int ) sub ; //定义一个函数指针指向 sub 函数 int( *parr[2] )( int ,int ) {pfpf1 }; //此时的parr就是一个数组类型为函数指针存放了两个函数指针 } 根据上述代码我们就能知道函数指针数组究竟是什么样的了需要注意的是 函数指针数组和普通数组大致相同存放的元素类型要相同所以存放的函数指针的类型也要相同 2、练习——计算器——避免使用switch
1基本思路
1. 首先简单的计算器我们需要 四个函数 来分别实现 加减乘除 四个功能
2.需要一个菜单来提醒用户
3.在主函数中需要循环并且由于不使用 switch所以应用本节学习使用函数指针数组。
2代码如下
#includestdio.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;
}
void menu() //菜单
{printf(***0.加法*******\n);printf(***1.减法*******\n);printf(***2.乘法*******\n);printf(***3.除法*******\n);printf(***4.退出*******\n);
}
int main()
{int(*pf[5])(int, int) { Add, Sub ,Mul,Div,NULL };//定义一个函数指针数组数组第12//34个元素分别对应四个函数可以使用下标来取出最后一个元素是个空指针来退出程序int a 0; //定义一个局部变量来让用户选择具体算法int b, c 0;do {//使用do while循环可以不判断先执行一次menu();printf(请选择\n);scanf_s(%d, a);if (a 0 a 3)//下标在0~3即对应四个函数{printf(请输入两个数\n);scanf_s(%d %d, b, c);int ret pf[a](b, c); //调用printf(%d\n, ret);}else if (a 4)//下标为4就对应空指针{printf(退出\n);break;}else{printf(选择错误\n);//选择其余显示错误break;}} while (a);return 0;
}
执行如下