百度
360搜索
搜狗搜索

c语言指针函数,c语言中函数指针是什么 有什么用 举个实例详细介绍

本文目录一览: c语言中函数名就是函数指针吗?

是的。c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。
“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后。
可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
扩展资料:如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
参考资料来源:百度百科--函数指针
参考资料来源:百度百科--C语言

C语言求教!指针函数!

p 是一个float类型的指针
search是一个函数名的说明格式,这个函数的返回值是 float 类型的指针 即float *
search 这个函数 有两个参数
第一个参数是 的类型是 float(*)[4] 参数名是 pointer 说明函数search第一参数是一个行指针,
第二个参数的类型 是 int 参数名是 n
看你纠结得,C语言中,一个指针代表一个数据块。
无论是元数据(int ,float char ...),还是复杂数据(数组,结构体,链表...),都可以用指针指向它们。只需区别它们的引用规则即可。
函数也只是一块数据块,所以也可以使用指针指向它,然后引用它。
float *search(float (*pointer)[4],int n), *p;定义了两个指针,类型float。
*pointer是指向一块数组数据的指针,但是它是函数的行参名,当调用search时就指向score了。就是这一句:
p=search(score,m);
search返回了一块float数据,p存储了这块数据的指针(数据块起始位置,C语言中,一个指针代表一个数据块)。
随后打印p,printf按float的长度按格式说明(%5.2)宽度打印结果。
search函数返回某位同学的分数存储位置,p存储了它,然后打印p指向的每门分数,但是第四位同学的成绩肯定是错的了,看看“score[3][4]",只有3个的。
*search其实可以这样声明(古老的C编译器可能不行),不要行参名了:
float *search(float *, int ), *p;
想象一下,都市里大楼小屋林立,每栋屋子都有一个名字,我们可以按名字找到它,也可以按坐标找到它。我们可以从某处取物,也可以把孩子送入幼儿园,可以把伤员送入医院。我们也可以建一个啥的,然后它有了名字,坐标,甚至功能。比如XX娱乐中心,坐标(X,Y),可打球,喝酒,XXOO啥的,别人要找它,告诉的哥它名字或坐标即可。

c语言中函数名就是一个指针吗

是的。c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。
“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后。
可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
扩展资料:如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
参考资料来源:百度百科--函数指针
参考资料来源:百度百科--C语言
  c语言中, 函数名也称为函数的指针,所以c语言中函数名就是一个指针。
  1,例如:
  ShowMenu是一个函数名,可以看到他的值是一个地址。
  &ShowMenu是对函数取地址,指向和ShowMenu同样的地址。
  可以看出,ShowMenu是占用一个字节的,而作为指针&ShowMenu却占用四个字节。
  所以,函数名占用空间的。
2,?函数指针
指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
类型说明符 (*函数名)(参数)
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。
指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。
例如:
void (*fptr)();
把函数的地址赋值给函数指针,可以采用下面两种形式:
fptr=&Function; fptr=Function;
取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。可以采用如下两种方式来通过指针调用函数:
x=(*fptr)(); x=fptr();
第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。下面举一个例子:
void (*funcp)(); void FileFunc(),EditFunc();
main() {
funcp=FileFunc; (*funcp)();
funcp=EditFunc; (*funcp)();
} void FileFunc()
{ printf("FileFunc\n");
} void EditFunc()
{ printf("EditFunc\n"); }
程序输出为:
FileFunc EditFunc
可以这样理解,函数名就像数组名一样,只不过函数名是代码段的指针,而数组名是数据段的指针
没错,函数名就像是数组名,也是指针,独有特点就是①存在于代码段、②定值(程序加载进内存后就不能改变了);相对的,普通的指针是可以移动的(改变他的指向)
不一定。你可以定义一个指针函数。
是的。函数指针就是函数的指针,它是一个指针,指向一个函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
例:
A) char * (*fun1)(char * p1,char * p2);
B) char * *fun2(char * p1,char * p2);
表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。
C) char * fun3(char * p1,char * p2);
fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。
扩展资料
函数指针使用的例子
#include

#include

char * fun(char * p1,char * p2)

{

int i = 0;

i = strcmp(p1,p2);

if (0 == i)

{

return p1;

}

else

{

return p2;

}

}

int main()

{

char * (*pf)(char * p1,char * p2);

pf = &fun;

(*pf) ("aa","bb");

return 0;

}

c语言中函数指针是什么 有什么用 举个实例

函数指针指函数的入口地址,作用就是跳转。比如设置回调函数,线程函数、结构体中的成员函数等。
回调:
typedef void (WINAPI *USBCALLBACK)(bool,bool);//回调函数……USBCALLBACK pCallBack; void SetCallBack(USBCALLBACK USBCallBack)//回调,指定设备接入或拔出{ pCallBack=USBCallBack;}线程
DWORD WINAPI DataHandleThread(LPVOID lParam)//处理数据线程{ //TODO: } ……m_hDataHandle=CreateThread(NULL,0,DataHandleThread,this,0,NULL);//启动线程结构体
typedef struct LUNARHANDLE{ bool (*GetLunar)(int iYear,int iMonth,int iDay,LUNARDATE* lunardate); };以上这几种用法都摘自我自己的项目,请参考。
比如C++中的快排函数qsort, 的最后一个函数就是函数指针 compare, 这个函数决定了排序是从小到大,还是从大到小
int (*compare)(void *a, void*b);
然后咱们定义下面两个函数:
int Ascending(void *a, void *b){ //
return (int *)a < (int*)b;
}
int Descending(void *a, void *b){
return (int *)a > (int*)b;
}
在调用qsort(int a[], N,sizeof(int), Ascending);就是升序。
而qsort内部实现过程中,对于数组元素之间的比较,都是使用的compare函数指针完成的。
从这个例子可以看出,函数指针,增加了代码的灵活性和复用性(为了升序和降序,不用写两个版本的qsort)
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
下面的程序说明了函数指针调用函数的方法:
#include

阅读更多 >>>  gets函数头文件,gets函数在c++在哪个头文件

int max(int x,int y){return (x>y? x:y);}int main(){ int (*ptr)(int, int); int a, b, c; ptr = max; scanf("%d%d", &a, &b); c = (*ptr)(a,b); printf("a=%d, b=%d, max=%d", a, b, c); return 0;}

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

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

C语言指针函数?

应该是的,还可以用f(a+I)的形式。
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。
那么这个指针变量怎么定义呢?虽然同样是指向一个地址,但指向函数的指针变量同我们之前讲的指向变量的指针变量的定义方式是不同的。例如:
int(*p)(int, int);
这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“*”,即(*p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。
所以函数指针的定义方式为:
函数返回值类型 (* 指针变量名) (函数参数列表);
“函数返回值类型”表示该指针变量可以指向具有什么返回值类型的函数;“函数参数列表”表示该指针变量可以指向具有什么参数列表的函数。这个参数列表中只需要写函数的参数类型即可。
我们看到,函数指针的定义就是将“函数声明”中的“函数名”改成“(*指针变量名)”。但是这里需要注意的是:“(*指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。
那么怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢?首先看变量名前面有没有“*”,如果有“*”说明是指针变量;其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。

C语言:指针函数跟函数指针的区别

指针函数是个函数,其返回值是指针;
函数指针是一个指针,指向函数的入口地址;
典型的指针函数如:void* malloc(unsigned int size);
这个内存分配函数就是个返回void*指针类型的函数。
若写成void (* fun_ptr)(unsigned int size);
这时fun_ptr表示一个函数指针。指向一个参数为unsigned int size,返回值为void类型的函数。
楼上两位均正解
本质的区别是:
一个是函数 一个是指针变量
1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针
类型标识符 *函数名(参数表)
int *f(x,y);

2、函数指针是指向函数的指针变量,即本质是一个指针变量。
 int (*f) (int x); /* 声明一个函数指针 */
 f=func; /* 将func函数的首地址赋给指针f */
希望对您有所帮助

c语言指针用法有哪些 如何应用

在下文中,我将会告诉大家c语言的指针都有哪些用法。

c语言指针用法 int t 定义整型变量
int *p:p为指向整型数据的指针变量。
int a[n]:定义整型数组a,它有n个元素。
int *p[n]:定义指针数组p,它由n个指向整形数据的指针元素组成。
int (*p)[n]:p为指向含n个元素的一维数组的指针变量。
int f():f为返回整型函数值的函数。
int *f():p为返回一个指针的函数,该指针指向整型数据。
int (*f)():p为指向函数的指针,该函数返回一个整形值。
int **p:p是一个指针变量,它指向一个指向整形数据的指针变量。
c语言的应用 驱动程序,无论是操作系统或者单片机,对硬件的驱动除了汇编(比较繁琐),都是用C语言来编写。
系统服务,由于操作系统都提供了C语言的API,并且C语言的执行效率比较高,所以用C语言来写系统服务是最适合不过的。
应用软件,由于C语言没有成熟的开发框架,所以不适合开发大型应用程序。但也有一些对效率要求比较高的程序使用C语言开发,如Git。
应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。
C语言是面向过程语言,C语言通过windows平台下编译的,是直接运行在windows平台下的,而Java始终是运行在他的虚拟机之上的;所以理论上C语言能做一些相对于比较底层的工作,像Java就不能编写Windows病毒。

c语言函数指针的作用。

C语言中函数指针与普通指针没什么差别,只是指向的内容不同而已。主要作用:
1、实现面向对象编程中的多态性。
2、回调函数。
函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。
函数指针有两个用途:调用函数和做函数的参数。

网站数据信息

"c语言指针函数,c语言中函数指针是什么 有什么用 举个实例"浏览人数已经达到19次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:c语言指针函数,c语言中函数指针是什么 有什么用 举个实例的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!