指针函数与函数指针的区别 1、指针函数:是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *fun(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同一类型的指针变量来接收。也就是说指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 (1)、定义指针函数的一般形式如下: 类型名 *函数名(参数); 例如: int *fun(int a); int *p; p =fun(a); 2、函数指针:函数指针是指向函数的指针变量,即本质是一个指针变量。 (1)、什么是函数指针 如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配了一段存储空间,这段存储空间的起始地址(又称为入口地址)称为这个函数的指针。 可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如: int (*p) (int ,int );//定义p是一个指向函数的指针变 //量,它可以指向函数的类型为整型且有两个整型参数 //的函数。p的类型是int (*)(int ,int )表示。 (2)、用函数的指针变量调用函数 如果想调用一个函数,除了可以通过函数名调用以外,还可以通过指向函数的指针变量来调用该函数。 例子1:用函数求整数a和b中的大者。 (1)、通过函数名调用函数 /* (1)、通过函数名调用函数 */ #include <stdio.h> int main() { int max(int, int);//函数的声明 int a, b, c; printf(“Pleade input 2 integer numbers:”); scanf_s(“%d,%d”, &a, &b); c = max(a, b);//通过函数名调用max函数 printf(“a=%d b=%d max=%d ”, a, b, c); getchar(); return 0; } int max(int x,int y)//定义max函数 { int z; if (x > y) z = x; else z = y; return (z); }
(2)、通过指针变量访问它所指向的函数 /* (2)、通过指针变量访问它所指向的函数 */ #include <stdio.h> int main() { int max(int, int);//函数的声明 int (*p)(int,int);//定义指向函数的指针变量p int a, b, c; p = max;//使p指向max函数 printf(“Pleade input 2 integer numbers:”); scanf_s(“%d,%d”, &a, &b); c =(*p)(a, b); //通过指针变量调用max函数 printf(“a=%d b=%d max=%d ”, a, b, c); system(“pause”); return 0; } int max(int x,int y)//定义max函数 { int z; if (x > y) z = x; else z = y; return (z); } 上面的两个程序的运行结果一样。 注意: 对于“int (*p)(int ,int);”,*p两侧的括号不能省略,表示p先与*结合,是指针变量,然后再与后面的()结合,()表示的是函数,即该指针变量不是指向一般的变量,而是指向函数。 如果写成“int * p(int ,int );”,由于()优先级高于*,它相当于“int *(p(int,int));”就成了声明一个p函数了(这个函数的返回值是指向整型变量的指针)。 “p=max;”的作用是将函数max的入口地址赋给指针变量p。和数组名代表数组首素地址类似,函数名代表函数的入口地址。这样p就是指向函数max的指针变量,此时p和max都指向函数的开头。调用*p就是调用max函数。 (3)、怎样定义和使用指向函数的指针变量 定义指向函数的指针变量的一般形式如下: 类型名 (*指针变量名)(函数参数列表); 注意: 1、定义指向函数的指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向定义时指定的类型的函数。如:“int (*p) (int ,int );”表示指针变量p只能指向函数返回值为整型且有两个整型参数的函数。 2、如果要用指针调用函数,必须先使指针变量指向该函数。如:p = max; 3、在给函数指针变量赋值时,只需给出函数名而不必给出参数,如: p = max;//将函数的入口地址赋给p 如果写成: p = max(a,b); 就错了,因为p=max(a,b)是将调用max函数所得到的函数值赋给p,而不是将函数的入口地址赋给p。 4、用函数指针变量调用函数时,只需将(*p)代替函数名即可(p为指针变量名,存放的是函数的入口地址),在(*p)之后的()中根据需要写上实参。例如: c =(*p) (a,b); 5、对指向函数的指针变量不能进行算术运算,如:p+n、p++、p–等运算是没有意义的。 6、用函数名调用函数,只能调用所指定的一个函数,而通过指针变量调用函数则比较灵活,可以根据不同的情况先后调用不同的函数。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/34448.html