函数指针怎么写

1.c++的函数指针怎么写

如:

有一函数

void fun(void);//这是fun函数的声明

fun(){};//这是fun函数的调用

fun;//当只是函数的名字的时候就代表着函数入口的地址

这样,我们可以通过定义一个指针,然后使这个指针指向函数的入口,这样,我么就可以间接调用函数了。

具体例子

int main()

{void (*p)(int n);//声明函数指针的时候,参数的个数和类型必须和被指向的函数相同

void fun(int a);

p=fun;//指针p指向fun,fun是地址,正确

(*p)(0);//通过指针调用函数,与p();等价其中0是作为函数的参数

return 0;}

void fun(int a)

{}

因为函数的调用是需要一定的开销的,当一个函数经常被调用的时候,如果函数只有几行,这样我们可以通过inline函数来解决函数调用开销的问题。

但是如果函数有很多行且经常调用,那么,我们可以通过函数指针来解决函数调用开销的问题

2.谁帮我写一个指针函数的实例简单的

指针函数是指函数的返回值类型是一个指针类型,即本质是一个函数。

我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

其定义格式如下所示:

返回类型标识符 *函数名称(形式参数表)

{ 函数体 }

返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子: #include <stdio.h>

float *find(float(*pionter)[4],int n);

main()

{

static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};

float *p;

int i,m;

printf("Enter the number to be found:");

scanf("%d",&m);

printf("the score of NO.%d are:\n",m);

p=find(score,m-1);

for(i=0;i<4;i++)

printf("%5.2f\t",*(p+i));

}

float *find(float(*pionter)[4],int n)/*定义指针函数*/

{

float *pt;

pt=*(pionter+n);

return(pt);

}

共有三个学生的成绩,函数find()被定义为指针函数,起形参pointer是指针指向包含4个元素的一维数组的指针变量。pointer+n指向score的第n+1行。*(pointer+1)指向第一行的第0个元素。pt是一个指针变量,它指向浮点型变量。main()函数中调用find()函数,将score数组的首地址传给pointer.

3.怎样用函数指针做参数

列了几个简单的应用:

//形式1:返回类型(*函数名)(参数表)

#include<cstdio>

char (*pFun)(int);

char glFun(int a){printf("just a test,hehe\n"); return 'a';}

void main()

{

pFun = glFun;

(*pFun)(2);

}

//形式2:typedef 返回类型(*新类型)(参数表)

typedef char (*PTRFUN)(int);

PTRFUN pFun;

char glFun(int a){ return;}

void main()

{

pFun = glFun;

(*pFun)(2);

}

//形式三

#include<iostream>

using namespace std;

class CA

{

public:

char lcFun(int a){cout<<"just a test "<<a<<endl; return 'a'; }

};

typedef char (CA::*PTRFUN)(int);

int main()

{

CA ca;

PTRFUN pFun;

pFun=&CA::lcFun;

//ca.lcFun(2);

(ca.*pFun)(2);

return 0;

}

4.C语言中函数指针用法

函数在内存中有一个物理位置,而这个位置是可以赋给一个指针的。

一零点函数的地址就是该函数的入口点。因此,函数指针可被用来调用一个函数。

函数的地址是用不带任何括号或参数的函数名来得到的。(这很类似于数组地址的得到方法,即,在只有数组名而无下标是就得到数组地址。)

怎样说明一个函数指针变量呢 ?为了说明一个变量 fn_pointer 的类型是"返回值为 int 的函数指针", 你可以使用下面的说明语句:int (*fn_pointer) ();为了让编译器能正确地解释这句语句, *fn_pointer 必须用括号围起来。若漏了这对括号, 则:int *fn_pointer ();的意思完全不同了。

fn_pointer 将是一个函数名, 其返回值为 int 类型的指针。2:函数指针变量 在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); 调用函数的一般形式为: (* 指针变量名 ) ( 实参表 ) 使用函数指针变量还应注意以下两点:a. 函数指针变量不能进行算术运算,这是与数组指针变量不同的。

数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。b. 函数调用中 "(* 指针变量名 )" 的两边的括号不可少,其中的 * 不应该理解为求值运算,在此处它只是一种表示符号。

3:指针型函数 前面我们介绍过,所谓函数类型是指函数返回值的类型。 在C语言中允许一个函数的返回值是一个指针 ( 即地址 ) ,这种返回指针值的函数称为指针型函数。

定义指针型函数的一般形式为:类型说明符 * 函数名 ( 形参表 ) { …… /* 函数体 */ } 其中函数名之前加了 "*" 号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。

如:int *ap(int x,int y) { …… /* 函数体 */ } 表示 ap 是一个返回指针值的指针型函数, 它返回的指针指向一个整型变量。下例中定义了一个指针型函数 day_name ,它的返回值指向一个字符串。

该函数中定义了一个静态指针数组 name 。 name 数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。

形参 n 表示与星期名所对应的整数。在主函数中, 把输入的整数 i 作为实参, 在 printf 语句中调用 day_name 函数并把 i 值传送给形参 n 。

day_name 函数中的 return 语句包含一个条件表达式, n 值若大于 7 或小于 1 则把 name[0] 指针返回主函数输出出错提示字符串 "Illegal day" 。否则返回主函数输出对应的星期名。

主函数中的第 7 行是个条件语句,其语义是,如输入为负数 (i<0) 则中止程序运行退出程序。 exit 是一个库函数, exit(1) 表示发生错误后退出程序, exit(0) 表示正常退出。

应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如 int(*p)() 和 int *p() 是两个完全不同的量。

int(*p)() 是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回值是整型量, (*p) 的两边的括号不能少。int *p() 则不是变量说明而是函数说明,说明 p 是一个指针型函数,其返回值是一个指向整型量的指针,*p 两边没有括号。

作为函数说明, 在括号内最好写入形式参数,这样便于与变量说明区别。 对于指针型函数定义,int *p() 只是函数头部分,一般还应该有函数体部分。

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_n ame(int n) { static char *name[]={ "Illegal day","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; return((n<1||n>7) ? name[0] : name[n]);} 本程序是通过指针函数,输入一个 1 ~ 7 之间的整数, 输出对应的星期名。指针数组的说明与使用一个数组的元素值为指针则是指针数组。

指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具。

5.如何定义指向函数的指针

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

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

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

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

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

二、函数指针的用法:

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

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

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

扩展资料:

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

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

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

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

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

6.什么是函数指针

#include "stdio.h"

int func_k01(void);

int func_k02(void);

int func_k03(void);

int func_k04(void);

const all_func[]=

{

func_k01,

func_k02,

func_k03,

func_k04,

};

void main()

{

static int (*allkeyfunc)(); /*key function of all.*/

int retvalue;

char funcoffset;

for(funcoffset=0; funcoffset<4; funcoffset++)

{

allkeyfunc = all_func[funcoffset];

retvalue = (*allkeyfunc)();

printf("%d\n", retvalue);

}

}

int func_k01()

{

return(1);

}

int func_k02()

{

return(2);

}

int func_k03()

{

return(3);

}

int func_k04()

{

return(4);

}

7.指针函数,指向指针的指针

指针函数不同于函数指针。

函数指针声明为指针,它与变量指针不同之处是,它不是指向变量,而是指向函数。

函数指针有两个用途:调用函数和做函数的参数.

指针函数是函数,函数返回的不是数值,而是指针。

写法:

返回类型标识符 *返回名称(形式参数表){ 函数体 }

例如:

float *find();

main()

{

static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};

float *p;

int i,m;

printf("Enter id: 1 or 2 or 3:");

scanf("%d",&m);

printf("goup %d data are:\n",m);

p=find(score,m-1);

for(i=0;i

函数指针怎么写

转载请注明出处育才学习网 » 函数指针怎么写

知识

十六个音节怎么写

阅读(164)

本文主要为您介绍十六个音节怎么写,内容包括16个的整体音节是,16个整体认读音节怎么写,十六个音节是什么。整体认读音节一共有十六个,分别是zhi、chi、shi、ri、zi、ci、si、yi、wu、yu、ye、yue、yuan、yin、yun

知识

蔷薇的英文怎么写

阅读(174)

本文主要为您介绍蔷薇的英文怎么写,内容包括蔷薇用英语怎么说,蔷薇花用英语怎么说,蔷薇的英文是怎么写的。Shinevien如果要读音类中文的,可用这个哈。这是偶自创的,以区别于被注册为商品品牌的 shineway。Shine是“闪耀的”,v

知识

比比皆是怎么写

阅读(235)

本文主要为您介绍比比皆是怎么写,内容包括比比皆怎么写句子,照样子,仿写词语日积月累比比皆是,()()皆是怎么写呢。◎上自朝廷,下至草野,比比皆是。(清·曹雪芹《红楼梦》第二回)◎秉笔之士所用故实,有淹贯所不究者,有蹈前人旧辙而不讨论所从来者,譬

知识

英语做简历怎么写

阅读(199)

本文主要为您介绍英语做简历怎么写,内容包括英语简历怎么写,英文简历怎么写才好,英文简历怎么写。英语简历各方面的学习,最好要看看:)~ http://blog.diandian.net/bbs/Archive_view.asp?bo

知识

高一单词怎么写

阅读(189)

本文主要为您介绍高一单词怎么写,内容包括高一英语单词用英语怎么写,高一英语单词听写,高一英语单词表(高一全部的)。高一英语全部单词表:UNIT 1honest adj.诚实的;正直的brave adj.勇敢的loyal adj.忠诚的;忠心的wise

知识

苹在田字格怎么写

阅读(236)

本文主要为您介绍苹在田字格怎么写,内容包括苹字在田字格怎么写,苹字在田字格怎么写,人字在田字格的写法。苹 田字格占位写法(楷体):

知识

防腐申请报告怎么写

阅读(173)

本文主要为您介绍防腐申请报告怎么写,内容包括变电站防腐计划申请怎么写请各大师帮帮我,申请书怎么写,提前施工申请报告怎么写。虽然不q太x了u解领班是什8么e样的工y作性质。不g过还是想给你提点思路供你参考吧。首先,至少0要知道你所申请的

知识

说的广东话怎么写

阅读(235)

本文主要为您介绍说的广东话怎么写,内容包括广东话的“说”字怎么写,广东话怎么说,常用的广东话怎么说。写法:轰gweng1 广东话拼音详解简介 广东话拼音是广东地区的方言进行拉丁化之后的一种语音标注体系。广东话拼音(Penkyampji)

知识

日语有人吗怎么写

阅读(147)

本文主要为您介绍日语有人吗怎么写,内容包括日语“有人在吗”怎么写那韩文呢,日语的“有人吗”怎么写,读,有人吗用日语怎么写。你好: ( こんにちわ)( kong ni ji wa ) ( 空你击挖 ) 对不起: ( すみません)( su mi ma sen )

知识

巴蒂英语怎么写

阅读(182)

本文主要为您介绍巴蒂英语怎么写,内容包括巴蒂用英语怎么说,艾维巴蒂英文怎么写,知道英文的“巴蒂”怎么写嘛是一个名字。Gabriel Omar Batistuta 巴蒂斯图塔 绰号:①“Batigol”(“巴蒂入球”)②“战神”③“蝙蝠侠”因为是著名的射

知识

调配申请怎么写

阅读(279)

本文主要为您介绍调配申请怎么写,内容包括调岗申请怎么写,调动申请书怎样写,调店申请怎么写。调换岗位申请书 尊敬的各部门领导: 本人深为感激公司领导给予我的最大程度的提升发展空间,感谢领导对本人工作学习的关怀与指导,唯有以更为出

知识

牙齿字怎么写

阅读(490)

本文主要为您介绍牙齿字怎么写,内容包括牙齿的齿字怎么写,牙字的笔顺怎么写,牙的笔顺牙的笔画牙字怎么写。

知识

忠的隶书怎么写

阅读(171)

本文主要为您介绍忠的隶书怎么写,内容包括忠的书法繁体字怎么写,善字的隶书怎么写,哲字的隶书怎么写。

知识

红细胞怎么写

阅读(211)

本文主要为您介绍红细胞怎么写,内容包括红细胞用什么符号表示,红细胞计数的公式求详解写一个步骤谢谢大神们,WBC、Hb、PLT分别代表()A.红细胞,白细胞,血红蛋白和血小板。通常缩写都是多个单词的首字母,或者单个单词前面2、3个字母亦或是几个辅

知识

怎么写似然函数

阅读(243)

本文主要为您介绍怎么写似然函数,内容包括数理统计中似然函数怎么求啊,概率论,图中画圈部分,似然函数这式子是怎么写出来的为什么有的,数理统计中似然函数怎么求啊。假设样本x1~xn独立同分布,具有概率密度函数p(xi;α) (1<=i<=n),其中α为要估计

知识

r语言怎么写函数

阅读(190)

本文主要为您介绍r语言怎么写函数,内容包括R语言怎么写函数,如何用R语言编写一些自己的函数,r语言function怎么写。自带函数factorial(n),可以算正整数n的阶乘自带函数prod(x),可以算向量x的连乘,当x为1:n时即为阶乘5的阶乘5!可以

知识

pythonmain函数怎么写

阅读(257)

本文主要为您介绍pythonmain函数怎么写,内容包括python怎么写main函数,python怎么写main函数,如何理解python中的main函数。print main当脚本作为执行脚本时__name__的值为__main__当脚本作为模块时__name__为模块文件名。main函数

知识

bool函数怎么写

阅读(378)

本文主要为您介绍bool函数怎么写,内容包括C++中怎么使用bool函数,C++退出BOOL函数怎么写,bool函数到底有什么用。bool类型和float、double型类似,定义方法依然是变量名前定义变量类型,函数名前定义函数类型。比如bool a=0; bool

知识

传递函数怎么写

阅读(198)

本文主要为您介绍传递函数怎么写,内容包括求这题传递函数怎么写,传递函数怎么求,用C语言怎么编写传递函数。不是L变换叫啥传递函数?之所以要用拉氏变换,是因为时域里是卷积信号,复杂的电路要计算卷积是很复杂的,但因为时域卷积等于频域相乘,所以

知识

visit函数怎么写

阅读(189)

本文主要为您介绍visit函数怎么写,内容包括数据结构中的visit函数怎么写,数据结构中的visit函数怎么写,C中visit函数是怎么写的返回值是什么。Visit函数是对数据元素操作的具体函数。void Visit(TNode *node){cout<<node->value<<" ";

知识

excel包含函数怎么写

阅读(226)

本文主要为您介绍excel包含函数怎么写,内容包括excel多条件包含函数怎么写,excel包含公式怎么写,excel包含公式怎么写。源数据在A列,A1起。在B1输入=IF(COUNT(FIND({"xx","yy"},A1)),"xx",IF(COUNT(FIND({

知识

excelif函数同时满足条件怎么写

阅读(264)

本文主要为您介绍excelif函数同时满足条件怎么写,内容包括excel中if函数满足多个条件怎么写,excel中IF公式中同时满足2个条件的如何设置,在excel中,如何用if函数求同时满足两个条件的数。if (条件,满足条件返回的结果,不满足条件返回的结果)楼

[/e:loop]