竹子建设网站,变更备案网站可以访问吗,oa办公平台,辽宁省建设厅证书查询网站一#xff0e; 函数指针变量
1. 函数指针变量的定义#xff1a;
类比数组指针变量#xff0c;数组指针变量是存放数组地址的变量#xff0c;那么同理#xff0c;函数指针变量就是存放函数地址的变量。 2. 创建函数指针变量#xff1a;
函数是有地址的#xff0…一 函数指针变量
1. 函数指针变量的定义
类比数组指针变量数组指针变量是存放数组地址的变量那么同理函数指针变量就是存放函数地址的变量。 2. 创建函数指针变量
函数是有地址的函数名就是函数的地址。此外函数名也是函数的地址二者本质上一样因此它们的地址也一样。 我们如果想将函数的地址存放起来就需要创建函数指针变量了以下是函数指针变量的创建方式以上图函数为例
int (* p)(int x,int y)plus;
对函数指针变量创建的理解和对数组指针变量的理解是相似的
P是一个变量那么*p意思是这个变量是个指针变量在括号中的int x,int y表示p这个指针变量指向的参数的类型和参数的个数。要注意的是在这里写下xy和不写都是可以的只要表明参数的个数和类型就行最后最前面的int表示这个函数指针变量指向的返回类型是int类型的。 3. 函数指针变量的使用
我们通过创建一个加法函数来学习函数指针变量的使用
int plus(int x, int y)
{
return x y;
}
int main()
{ int x 0; int y 0; printf(请输入两个数); scanf(%d %d, x, y); int (*p)(int x, int y) plus;//创建一个函数指针变量来存放plus这个函数 printf(%d, (*p)(x, y)); return 0;
}
对于(*p)(x, y)这行代码我们可以这么理解
通过函数指针p调用指向的函数并将x和y作为参数传给该函数。 二 typedef关键字
在C语言中很多时候有很多类型比较长这时候如果我们想将这些类型简化就需要使用typedef关键字以下是它的基本使用方法以 unsigned int 为例
typedef unsigned int uint
这样在之后敲写代码的时候就可以用uint 来代替了。
注对于数组指针和函数指针要命名时方法稍有不同
数组指针eg: typedef int(* name)[8]
函数指针eg: typedef int(* name)(int x,int y) 三 函数指针数组
按照之前所说的理解方式我们重点关注最后两个字数组所以函数指针数组是存放函数指针变量的数组下面我们通过创建一个简单的计算器来学习函数指针数组的应用。 创建简单计算器的基本步骤
1创建四个函数分别可以进行加减乘除的运算
2创建一个菜单表示计算器的开始界面
3让读者选择是否开始使用计算器
4让读者选择要使用的计算方法
5让读者输入要计算的数
6计算结果并给出答案 函数指针数组的创建和使用和函数指针变量类似以下是其创建和使用格式
创建int (*p[5])(int x, int y)
由于[ ]的计算等级比*高所以p先和[ ]结合意味着p是一个数组其再和*结合意味着这是一个指针数组而这个指针数组中存放的就是一个或多个函数的地址。这样也就意味着所有存放的函数的参数和返回值必须是一样的这样函数指针数组才可以使用。
使用(*p[input])(x, y)
*p[input]的意思是指向这个函数指针数组中选择的input中的函数用x,y将其赋值并使用这个函数。 以下是参考代码
int first(int x, int y) { return x y; } int second(int x,int y) { return x - y; } int third(int x, int y) { return x * y; } int forth(int x, int y) { return x / y; } void menu(void) { printf(******************************\n); printf(**********0.退出 ************\n); printf(**********1.加法 ************\n); printf(**********2.减法 ************\n); printf(**********3.乘法 ************\n); printf(**********4.除法 ************\n); printf(******************************\n); } int main() { int input 0;//选择数 int x 0; int y 0;//要计算的数 //创建一个函数指针数组来存放函数指针变量 int (*p[5])(int x, int y) { 0,first,second,third,forth }; int a 0;//创建一个数来接收函数传过来的变量便于理解和打印 do { menu(); printf(请选择); scanf(%d, input); if (input 4 input 1) { printf(请输入要计算的数\n); scanf(%d %d, x, y); a (*p[input])(x, y); printf(计算结果是%d\n, a); } else if (input 0) { printf(退出计算器\n); } else { printf(选择错误请重新选择\n); } } while (input); return 0; } 四 几个基本概念的辨别 数组指针是指针里面存的是数组的地址 指针数组是数组里面存的是一个或多个指针地址 函数指针是指针里面存的是一个函数的地址 函数指针数组是数组里面存的是一个或多个函数的地址 数组指针
创建int (*p)[5]arr 使用(*p)[想找的数组的下标数] 指针数组
创建int *arr[3]{arr1,arr2,arr3} 使用arr[arr中数组的下标][arr 1/2/3中数组的下标] 函数指针
创建int (*p)(int x,int y)函数名; 使用(*p)(x,y) 函数指针数组 创建int(*p[5])(int x,int y){函数名1函数名2} 使用(*p[想找的函数名的下标])(x,y)