函数指针与指针函数的用法区别(c语言指针函数和函数指针有什么不同)

:暂无数据 2026-04-29 09:20:02 0
本篇关于函数指针与指针函数的用法区别的讲解,将摒弃陈词滥调,直击c语言指针函数和函数指针有什么不同这一实战要害,给你可即刻应用的策略。

本文目录

c语言指针函数和函数指针有什么不同

如楼上所说 。
指针函数 的本质是 函数 ,只是他的返回值 类型 是指针变量。
比如 int * A(int num); 这就是一个 指针函数。
函数指针 是一个 指针变量 ,只不过 他是 指向函数的 指针变量。
比如 有函数定义 如上 int * A(int num); 再有 int (*pf)(int num);
则是 pf = A;就把 函数A的首地址 赋值给 pf 函数指针了。

C语言中,指针函数和函数指针有什么区别

在C语言中指针函数和函数指针是两个不同的概念,不能混淆。
指针函数本质上是函数,是一个返回类型为指针的函数,如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一个指针函数。
而函数指针本质上是指针,是指向函数的指针,如:
int (*funp)(int a,int b);
funp就是一个函数指针,可以用它指向一个返回类型为int、有两个int类型的参数的函数。

函数指针和指针函数有什么区别!!

前一个是个函数指针,如果有个函数是这样定义的
int pfunction( )
那就可以用指针指向这个函数
p=pfunction;
然后调用时就可以这样用
p();
后一个是指针函数,他的返回值是一个指向整型变量的指针,

函数指针和指针函数有什么区别

  1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针
  类型标识符 *函数名(参数表)
  int *f(x,y);
  
  首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
  表示:
  float *fun();
  float *p;
  p = fun(a);
  注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
  2、函数指针是指向函数的指针变量,即本质是一个指针变量。
  int (*f) (int x); /* 声明一个函数指针 */
  f=func; /* 将func函数的首地址赋给指针f */
  
  指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
  类型说明符 (*函数名)(参数)
  其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。
  指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。

函数的指针和指针的函数有什么区别

简单点说指针就是地址的意思!!
函数的指针 即该函数所占连续内存单元的首地址,如:
□□□...□□□

"□□□...□□□"代表函数所占的内存单元,里面的内容是各种指令;函数的指针就是“↑”所指向的地址。一般用来调用一组类似的函数,从而方便的书写程序。也比较符合结构化设计的原则。
指针函数 就是返回值为指针的函数,一个函数经过运算之后得到的结果是一个指针(即地址)。一般的用法是求得这个指针再用它调取地址所存的值。

请教C++中函数型指针和指针型函数的用法和区别,谢谢

1 函数指针变量
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符 (*指针变量名)();
其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。
例如:
int (*pf)();
表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
【例】本例用来说明用指针形式实现对函数调用的方法。
int max(int a,int b){
if(a》b)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}

从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:
1) 先定义函数指针变量,如后一程序中第9行 int (*pmax)();定义 pmax为函数指针变量。
2) 把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max;
3) 用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y);
4) 调用函数的一般形式为:
(*指针变量名) (实参表)
使用函数指针变量还应注意以下两点:
a) 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。
b) 函数调用中"(*指针变量名)"的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。
2 指针型函数
前面我们介绍过,所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
如:
int *ap(int x,int y)
{
...... /*函数体*/
}
表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
【例】本程序是通过指针函数,输入一个1~7之间的整数,输出对应的星期名。
main(){
int i;
char *day_name(int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i《0) exit(1);
printf("Day No:%2d--》%s\n",i,day_name(i));
}
char *day_name(int n){
static char *name={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n《1||n》7) ? name);
}

本例中定义了一个指针型函数day_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组*****数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。在主函数中,把输入的整数i作为实参,在printf语句中调用day_name函数并把i值传送给形参*****_name函数中的return语句包含一个条件表达式,n值若大于7或小于1则把name指针返回主函数输出出错提示字符串“Illegal day”。否则返回主函数输出对应的星期名。主函数中的第7行是个条件语句,其语义是,如输入为负数(i《0)则中止程序运行退出程序。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如int(*p)()和int *p()是两个完全不同的量。
int (*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。
int *p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明,在括号内最好写入形式参数,这样便于与变量说明区别。
对于指针型函数定义,int *p()只是函数头部分,一般还应该有函数体部分。

函数指针和指针函数有啥区别

函数指针和指针函数的区别:
一、【函数指针】
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。
1、函数指针定义
函数类型(*指针变量名)(形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x); 在定义函数指针时请注意:
函数指针和它指向的函数的参数个数和类型都应该是—致的; 函数指针的类型和函数的返回值类型也必须是一致的。
2、函数指针的赋值
函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直接将函数指针指向函数名就行了。 例如,
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
3、通过函数指针调用函数
函数指针是通过函数名及有关参数进行调用的。
与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func。所以在执行了f=func;之后,(*f)和func代表同一函数。
由于函数指针指向存储区中的某个函数,因此可以通过函数指针调用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执行下面三步: 首先,要说明函数指针变量。
例如:int (*f)(int x);
其次,要对函数指针变量赋值。
例如: f=func; (func(x)必须先要有定义)
最后,要用 (*指针变量)(参数表);调用函数。
例如: (*f)(x);(x必须先赋值)
【例】任意输入n个数,找出其中最大数,并且输出最大数值。
main()
{
int f();
int i,a,b;
int (*p)(); /* 定义函数指针 */
scanf("%d",&a);
p=f; /* 给函数指针p赋值,使它指向函数f */
for(i=1;i《9;i++)
{
scanf("%d",&b);
a=(*p)(a,b); /* 通过指针p调用函数f */
}
printf("The Max Number is:%d",a)
}

f(int x,int y)
{
int z;
z=(x》y)?x:y;
return(z);
}
运行结果为:
343 -45 4389 4235 1 -534 988 555 789 The Max Number is:4389

二、【指针函数】
一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。
返回指针的函数,一般定义格式为:
类型标识符 *函数名(参数表)
int *f(x,y);
其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。
如:char *ch();表示的就是一个返回字符型指针的函数,请看下面的例题:
【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.
#include "*****"
main()
{
char *ch(char *,char *);
char str1="I am glad to meet you!";
char str2="Welcom to study C!";
printf("%s",ch(str1,str2));
}
char *ch(char *str1,char *str2)
{
int i;
char *p;
p=str2
if(*str2==NULL) exit(-1);
do
{
*str2=*str1;
str1++;
str2++;
}
while(*str1!=NULL);
return(p);
}
通过分析可得:
函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数, 函数指针可以用来指向一个函数。

函数指针与指针函数的区别

函数指针是一个指针,其一般表现形式为:返回值类型(*变量名)(参数),它可以指向相同类型的函数;
指针函数是一个函数,其一般表现形式为:返回值类型* 函数名(参数);本质还是一个函数,返回值是指针类型。
一个是指针,一个是函数

指针函数和函数指针的区别

1、指针函数:指的就是返回值是指针的函数,本质就是个函数。
2、函数指针:指的是指向函数的指针变量,本质就是个指针。

用法
1、指针函数:int* func(int a,int b);
普通函数就是int func(int a,int b);,返回值是int,而指针函数就是返回值是指针的函数,即返回值是int*。

2、函数指针:int (*func)(int x,int y);
这里定义了一个函数指针,只不过这个指针的格式有点特殊,正常定义的指针是把指针变量放到最后的,即int* p ;,p是指针变量,但是函数指针是把指针变量放到了中间,即func是指针变量,而且这是一个指向函数的指针变量,而具体指向哪个函数是自己定的。

C++中指针函数和函数指针的概念和区别

函数指针:一种特殊的指针,他只能指向函数的入口地址,定义方法如下:

int (*p)(int,int);  //定义一个函数指针p,只能指向返回值为int,形参为两个int的函数

返回指针的函数:一个函数,他的返回值是指针,比如:

int *p(int,int);{
 //函数体
}

这是一个形参为两个int类型,返回值是int型指针的函数

本站还有更多关于函数指针与指针函数的用法区别c语言指针函数和函数指针有什么不同的专题文章,使用站内搜索功能,助你快速找到所需。
本文编辑:admin

更多文章:


socket调webservice(WebService、Restful、Http、Socket)

socket调webservice(WebService、Restful、Http、Socket)

这篇文章给大家聊聊关于socket调webservice,以及WebService、Restful、Http、Socket对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年4月29日 11:00

canva电脑版下载(如何制作海报设计)

canva电脑版下载(如何制作海报设计)

我们整理了关于canva电脑版下载最高频的提问,发现如何制作海报设计位列榜首。于是,就有了这篇集中解答的精华帖。

2026年4月29日 10:40

网页float是什么意思(网页制作css中的浮动float和清除clear怎样理解)

网页float是什么意思(网页制作css中的浮动float和清除clear怎样理解)

今天这份关于网页float是什么意思的指南,将用80%的篇幅讲透网页制作css中的浮动float和清除clear怎样理解这个决定成败的细节,绝对让你不虚此行。

2026年4月29日 10:20

rownum函数(sqlserver rownum是干什么的)

rownum函数(sqlserver rownum是干什么的)

面对rownum函数这个议题,很多人在sqlserver rownum是干什么的这里栽了跟头。今天,我们就来聊聊如何避免这个坑,轻松上手。

2026年4月29日 10:00

游戏怎么开发制作?游戏开发怎么做

游戏怎么开发制作?游戏开发怎么做

各位老铁们好,相信很多人对开发游戏都不是特别的了解,因此呢,今天就来为大家分享下关于开发游戏以及游戏怎么开发制作的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年4月29日 09:40

函数指针与指针函数的用法区别(c语言指针函数和函数指针有什么不同)

函数指针与指针函数的用法区别(c语言指针函数和函数指针有什么不同)

本篇关于函数指针与指针函数的用法区别的讲解,将摒弃陈词滥调,直击c语言指针函数和函数指针有什么不同这一实战要害,给你可即刻应用的策略。

2026年4月29日 09:20

silverlightd盘(vs安装到D盘使用有影响吗)

silverlightd盘(vs安装到D盘使用有影响吗)

就像学骑车需要掌握平衡一样,理解silverlightd盘的窍门,恰恰在于把握好vs安装到D盘使用有影响吗这个“平衡点”。

2026年4月29日 09:00

fwrite函数原型(fatfs f write函数,我要写入一个unsigned short int 类型的数据,即一次两个字节,但是写进去是乱码)

fwrite函数原型(fatfs f write函数,我要写入一个unsigned short int 类型的数据,即一次两个字节,但是写进去是乱码)

有没有觉得fwrite函数原型听起来很高深?别怕,今天我们就把它和fatfs f write函数,我要写入一个unsigned short int 类型的数据,即一次两个字节,但是写进去是乱码一起,拆解成易懂的小知识点。

2026年4月29日 08:40

web服务器主要功能(Web服务器为互联网提供了广泛的服务内容以下关于Web服务器主要功能的叙述中,(  )是不正确的)

web服务器主要功能(Web服务器为互联网提供了广泛的服务内容以下关于Web服务器主要功能的叙述中,(  )是不正确的)

本文旨在为您说清楚两件事:一是web服务器主要功能到底是什么,二是如何理解Web服务器为互联网提供了广泛的服务内容以下关于Web服务器主要功能的叙述中,(  )是不正确的。内容不长,但都是干货,希望能对您有所帮助。

2026年4月29日 08:20

sql存储过程简单例题(使用**L语句创建存储过程如题 谢谢了)

sql存储过程简单例题(使用**L语句创建存储过程如题 谢谢了)

本文是您理解sql存储过程简单例题的最后一站。我们将通过剖析使用**L语句创建存储过程如题 谢谢了,帮你打通任督二脉,彻底领悟。

2026年4月29日 08:00

最近更新

socket调webservice(WebService、Restful、Http、Socket)
2026-04-29 11:00:02 浏览:0
rownum函数(sqlserver rownum是干什么的)
2026-04-29 10:00:02 浏览:0
游戏怎么开发制作?游戏开发怎么做
2026-04-29 09:40:02 浏览:0
热门文章

mysql insert into字段顺序问题(mysql insert into的问题)
2026-04-13 16:00:02 浏览:1
split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
标签列表