如何定义指向函数的指针?

如何定义指向函数的指针?,第1张

一、定义一个函数指针的方法如下:

返回值类型 (* 指针变量名)([形参列表])

1、int func(int x)/* 声明一个函数 */

2、int (*f) (int x)/* 声明一个函数指针 */

3、f=func/* 将func函数的首地址赋给指针f */

二、函数指针的用法:

函数指针的应用:(*指针变量名)(参数列表)

如:int c=(*ptr)(a,b)/* 函数指针 的使用*/

在C语言中,函数本身不是变量,但是可以定义指向函数的指针,也称作函数指针,函数指针指向函数的入口地址。这种类型的指针可以被赋值、存放在数组中、传递给函数以及作为函数的返回值等等。

扩展资料:

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

1、这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

2、返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

参考资料来源:百度百科-指针

参考资料来源:百度百科-函数指针

1.如果是返回值是指针

char* getname()

{

char* pname=new char[23] //返回指针必须是函数释放后并未释放的内存空间,

cout<<"input your name:\n" //一般返回两种情况,一是在函数中像该函数一样动态分配堆内存

cin.getline(pname,22) //二是返回指针指向参数中地址,如: int* max(int a,int b) { return &a}

pname[22]='\0'

return pname

}

int main()

{

char* name=getname()

cout<<"your name is: "<<name<<endl

delete []name //记得动态释放分配内存

return 0

}

2.参数是指针类型

常见的是通过指针或引用交换两个数的值

void swa(int* p1,int* p2)

{

int temp=*p1*p1=*p2*p2=temp

}

int main()

{

int a=2,b=3

swa(&a,&b) //传递地址

return 0

}

附解:你可以把指针看做是一种复合类型,它之所以可以修改参数值,本质是因为

对指针解除引用*p形式是 *** 作的参数所存数据内存空间,但如果它不解除引用,它

并不会修改参数的值:如

void swa(int* p1,int* p2) //函数意思是最初始在函数参数块中定义两个指针p1,p2,使

{ //p1指向a,p2指向b,下面函数体只是使指针指向地址改变,成了

//p1指向b,p2指向a。但并未对a,b内存空间 *** 作,当函数调用结束后,指针p1,p2

//也释放了,所以并未起任何作用

int* temp

temp=p1p1=p2p2=temp

}

int main()

{

int a=2,b=3

swa(&a,&b) //传递地址

cout<<a<<" "<<b

return 0

}

这个函数并不会交换a,b的值


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7937429.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存