指向函数的指针与返回指针的函数

字面看就可以看出二者的区别,指向函数的指针即指针指向的地址为某个函数,而返回指针的函数为某个函数返回值是指针。

下面具体说:

1、指向函数的指针

bool (*ptr)(int a);

解析:声明指针ptr,指向的函数带有一个int形参,并返回bool型变量。注:*ptr两边的括号是必须的。否则如下:

bool *ptr(int a);

为返回指针的函数,函数名ptr,参数为int 返回bool型指针变量。

2、指向函数的指针的初始化

只能通过0或者同类型的函数或函数指针进行初始化。可以用函数直接初始化,也可以取地址。

int example(int a)
{
    cout << a << endl;
    return a;
}
int main()
{
    int (*ptr)(int a);//声明指向函数的指针类型
   ptr = 0;//用0初始化,表示不指向任何函数
    ptr = example;//同类型函数初始化 或者ptr = &example;
    ptr(2);//调用此指针即调用同函数,输出2
  (*ptr)(3);//使用解引用调用也可以,输出3
    return 0;
}

3、指针函数调用

对指针函数的调用既是对指向函数的调用,可以不需要解引用(什么叫解引用?int *p = &a; *p;其中*p表示的是p指向的地址a所存储的值,所以这里*p为解引用)

例子看上面的例子代码即可。

4、函数指针作为形参

函数的形参也可以是指向函数的指针。

两种形式表示

void bigfun(int b, int (*ptr)(int a))
{//参数为指向函数的指针
    ptr(b);
}
void bigfun2(int b, int example(int a))
{//参数为某个函数类型
    example(b);
}
int example(int a)
{
    cout << a << endl;
    return a;
}
int main()
{
         int (*ptr)(int a);
         ptr = example;
         bigfun(1, ptr);         bigfun2(2, example);
         return 0;
}

5、返回指向函数的指针

既然可以作为参数,那么也可以返回

如下:int (*fun(int a))(int b);

解析:看着有点困惑,解读的话从里往外,表示一个函数名为fun,带有一个int a的形参,它的返回值是一个指向函数的指针,指向的函数是带有一个int b形参并返回int型的函数。

如果定义为typedef会容易解读

typedef int(*F)(int b);

返回F型的函数:

F fun(int a);

int example(int a)
{
    cout << a << endl;
    return a;
}
typedef int(*F)(int a);
F fun(int b)
{
    return example;
}
int main()
{

    int (*ptr)(int a);
    ptr = fun(2);
    ptr(3);
    return 0;
}

注:允许将形参定义为函数类型,但函数的返回类型则必须为指向函数的指针,而不能是函数。

func为一个函数类型,不是指向函数的指针

void fun(func);//ok, func is as a parameter

func fun(int a);//error, func can‘t be as a return type

func *fun(int a);//ok, fun returns a pointer to func

6、至于返回指针的函数就不再多讲了,与一般函数无二,只是返回值类型为指针而已。

时间: 2024-12-08 21:56:48

指向函数的指针与返回指针的函数的相关文章

善于指针---使用返回指针值的函数(续)

综合举个例子来说明一下,使用返回指针值的函数,也可以理解为利用指针传递内存. 在返回指针时,除可以返回动态内存外,还可以返回静态存储区.但是不能利用指针传递桟内存,因为桟内存函数结束时也消失了,返回的会是一些垃圾内容,无效. 基础内容见:善于指针---使用返回指针值的函数 //在返回指针时,除可以返回动态内存外,还可以返回静态存储区 #include<iostream> #include<string> using namespace std; //利用指针传值 char *Tes

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

C#中的函数(-) 无参无返回值的函数

分析下C#中的函数 先写一个小例子,一个静态函数,无返回值,无形参 在第17行与20行分别下断点 F5调试运行,此时中断在第17行MyFunction(), 在第17行右键反汇编,看下反汇编代码 这里的Call 002D0C30  对应用就是MyFunction() 此时F11直接进入MyFunction函数内部查看我们函数 002D2CA0就是MyFunction的入口,这里就有疑问了,明明上面Call 002D0C30,这里为什么是002D2CA0呢? 在地址栏上转到002D0C30,结果V

C#中的函数(二) 有参有返回值的函数

接上一篇 C#中的函数(-) 无参无返回值的函数 http://www.cnblogs.com/fzxiaoyi/p/8502613.html 这次研究下C#中的函数(二) 有参有返回值的函数 依然写一个小例子,用来测试 跟上一个例子差不多,区别就是MyFunction有二个参数a,b,返回二个数相加的值 F5调试运行,中断后转到反汇编 这里很明显看到不同了 这里就得讲到参数传递的方式,参数从左向右依次存入寄存器ecx edx 但是不同的编程语言有不同的传递参数的方式,有空再写一篇文章介绍下 要

函数初识:定义,调用,返回值,参数

一 函数的定义,调用,返回值 1.函数的作用: 封装 减少重复代码 2.函数的书写格式 def 关键字 定义一个函数 def 函数名(): 缩进 函数体(代码块) def func(): print('我') print('爱') print('你') return '1314' #返回值,将内容返回给调用者 #不写return或写了return不写值返回None msg = func() #函数名() -- 调用 print(msg) return返回多个变量是,返回的是元祖形式,返回的内容不

37 py为什么要使用函数函数中添加文本注释 没有返回值的函数

第一课:为什么要使用函数 首先 要知道 本课程的主要讲解的内容为: 1.为什么要创建函数 2.***函数的概念是:将一段可能别重用的代码封账到一个代码段里面,然后通过函数的参数 ,控制函数的动态部分.// 如何来定义python中的函数和使用函数 *** 3.如何创建一个函数 4.如何为函数添加文档注释,如何获取函数的文档注释 5.函数如何返回一个值 6.改变函数的参数值 7.关键字参数与参数默认值 8.可变参数 9.如何将序列中的元素单独作为参数值传递给函数 10.函数中的作用域 11.递归函

【C语言】-返回指针的函数与指向函数的指针

本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 回到顶部 前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如指针数组.指向数组的指针.指向指针的指针,呵呵,看到这些名字是否

返回指针的函数与指向函数的指针的用法

#include<stdio.h> #include<stdlib.h> void *func(){ /* * 一种很容易犯的错误,将局部变量的地址返回 */ int m; printf("define as void *func()/n"); return &m; } /* * 声明一个指向函数的指针,指向返回类型为void指针的函数 */ void *(*pfunc)(); /* void (*pfun)(); * 声明一个函数,指向一个返回void

切勿使用:指向局部变量的指针作为函数的返回指针!

今天码代码的时候,出现了一个诡异的问题: 首先:函数 pkt_analyzer 返回了一个 PktUnit类型的指针.我先把端点跑到puu赋值后的下一句,查看puu里面的内容,发现是正确的: payload_len = 7,pkt_len = 35 接着我再向下跑一步,发现puu内容就不对了: payload_len = 1514280713 ;pkt_len = 17 整个就不对了-- 找了一个多小时,没发现问题出在哪儿!后来突然想到,可能是函数返回的时候出的问题,不能光看函数的立即返回结果!