指针函数和函数指针

您所在的位置:网站首页 阳澄在哪个省 指针函数和函数指针

指针函数和函数指针

#指针函数和函数指针| 来源: 网络整理| 查看: 265

对应谭浩强第八章指针的8.5节 指向函数的指针(函数指针)8.6返回指针值的函数(指针函数)

函数指针

一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。

函数指针的定义形式为:returnType (*pointerName)(param list); returnType 为函数返回值类型,pointerNmae 为指针名称,param list 为函数参数列表。参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称,这一点和函数原型非常类似。

注意( )的优先级高于*,第一个括号不能省略,如果写作returnType *pointerName(param list);就成了函数原型,它表明函数的返回值类型为returnType *。 例子:int fun(int x, int y, int(*p)(int, int));//函数指针作为参数

#include int min(int x, int y) { int z; if (x > y) z = y; else z = x; printf("最小值为"); return z; } int max(int x, int y) { int z; if (x > y) z = x; else z = y; printf("最大值为"); return z; } int sum(int x, int y) { int z; z = x + y; printf("两数之和为"); return z; } int fun(int x, int y, int(*p)(int, int)) { int result; result = (*p)(x, y); printf("%d\n", result); return result; } int main() { int fun(int x, int y, int(*p)(int, int)); int sum(int x, int y); int max(int x, int y); int min(int x, int y); int a, b, n; printf("请输入两个整数"); scanf_s("%d%d", &a, &b); printf("请输入1或2或3决定你的操作(1为min,2为max,3为sum):"); scanf_s("%d", &n); if (n == 1) fun(a, b, min); else if (n == 2) fun(a, b, max); else if (n == 3) fun(a, b, sum); return 0; }

小甲鱼的函数指针例子:四则运算

#include //函数声明 int add(int, int); int sub(int, int); int mul(int, int); int div(int, int); //函数定义 int add(int num1, int num2) { return num1 + num2; } int sub(int num1, int num2) { return num1 - num2; } int mul(int num1, int num2) { return num1 * num2; }int div(int num1, int num2) { return num1 / num2; } int calc(int(*)(int, int), int num1, int num2);//函数声明 int calc(int(*fp)(int, int), int num1, int num2) { return (*fp)(num1, num2);//函数指针作为返回值 } //定义一个根据用户输入的运算符来选择计算方式的函数 int (*select(char op))(int, int); int (*select(char op))(int , int ) { switch (op) { //switch...case语句 case'+':return add; case'-':return sub; case'*':return mul; case'/':return div; default:return 0; } } //定义一下主函数 int main() { int num1, num2; char op; printf("请输入一个四则运算的式子(如1+2)"); scanf_s("%d%c%d", &num1, &op,1, &num2);//注意这里在&op后面写上字符长度,否则就会报错: //警告 C6273 传递了一个非整数作为_Param_(3),而对“scanf_s”的调用需要一个整数, //实际类型: “char *”: 如果当前传递的是一个指针值,则应使用 %p。 int (*fp)(int, int);//定义一个函数指针 fp = select(op); printf(" %d %c %d= %d\n", num1, op, num2, calc(fp, num1, num2)); return 0; }

在这里插入图片描述

指针函数

指针函数是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

类型名 * 函数名(函数参数列表); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。

指针函数作用:可以在是代码更简洁并在一定程度节约内存;如当你需要返回一个数组中的元素时,你就只需返回首元素的地址给调用函数,调用函数即可操作该数组(让函数返回多个值)。 例子:

#include float* search(float(*pointer)[4], int n)//形参pointer是指向一维数组的指针变量 { float* pt; pt = *(pointer + n); return pt;//指针函数返回类型是某一类型的指针 } int main() { float* search(float(*pointer)[4], int n); float score[][4] = { {56,54,89,56},{50,54,89,56}, {53,54,89,56} }; float* p; int i, k; printf("输入学生的序号:"); scanf_s("%d", &k); printf("第%d位学生的成绩为:",k); p = search(score, k); for (i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3