首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】函数指针 ④ ( 函数指针做函数参数 | 使用函数指针间接调用函数 | 函数指针做参数 | 函数指针类型的本质 | 函数指针做参数意义 )

pFun = add; // 通过函数指针间接调用 add 函数 pFun(7, 8); 如果将 函数指针变量 pFun_add pFun 作为参数 , 传递给函数 , 在函数内部可以调用其它函数...pFun_add pFun = add 传入函数作为参数 , 也可以直接将 add 函数名 ( 函数地址 ) 作为 函数指针 参数 传递给函数 ; // 定义函数指针类型变量 pFun_add pFun...函数名 ( 函数地址 ) 作为 函数指针 参数 // 传递给函数 caculate(add, 11, 12); 3、函数指针类型的本质 函数指针类型 本质 : 提前对任务 格式 进行约定 ; 函数参数类型...; 作为回调函数 : 函数指针 可以作为 回调函数 ; 先将 函数指针变量 作为 实参 传递给 其它函数 , 在 接收函数指针 的函数内部 , 满足某种条件时直接调用该函数指针 指向的 函数 , 这样实现了回调...; 错误处理 : 使用函数指针 , 将错误处理函数作为参数传递给其他函数 , 在发生错误时立即调用适当的错误处理函数 , 无需返回到调用堆栈中的较高层次 ; 二、代码示例 - 函数指针做函数参数 代码示例

1.5K50

函数参数的传值和传指针有什么区别?

因为函数参数在传递的时候,都是传原数据的副本,也就是说,swap内部使用的a和b只是最初始a和b的一个副本而已,所以无论在swap函数内部对a和b做任何改变,都不会影响初始的a和b的值。...为什么又有传值,又有传指针 看到这里,不知道你是否会疑惑,为什么给函数传递参数的时候,一会是传值,一会是传指针呢?为什么传指针就能改变参数的值呢?实际上,C语言里,参数传递都是值传递!...从图中可以看出,虽然传递给函数的是指向a和b的指针的副本,但是它的副本同样也是指向a和b,因此虽然不能改变指针的指向,但是能改变参数a和b指向的内容,即改变原始a和b的值。...我们还是利用前面所知来分析,由于传递给getMemory函数的参数都是一个副本,因此函数内的p也是外部p的一个副本,因此即便在函数内部,将p指向了一块新申请的内存,仍然不会改变外面p的值,即p还是指向NULL...getMemory 总结 本文总结如下: 函数的参数都是原数据的“副本”,因此在函数内无法改变原数据 函数中参数都是传值,传指针本质上也是传值 如果想要改变入参内容,则需要传该入参的地址(指针和引用都是类似的作用

3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言函数传参:指针的指针

    这是道哥的第013篇原创 前言 今天同事问了一个问题:在函数参数中传递指针的指针,很常用的一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。...size个字节的空间,然后返回给main函数中的pData指针。...执行do_work(pData, 128); 这里传递的参数是pData本身,所以进入void do_work(char *p, int size)函数之后,实参pData的内容就赋值给形参p,所以指针...执行do_malloc(&pData, 128); 把pData指针的地址作为实参进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针的指针(二级指针),因此do_malloc函数的第一个参数就要定义成...p此时是一个二级指针,参数赋值之后,p里面的内容就变成了pData这个指针变量的地址,也就是说p指向了pData这个变量。

    2.1K20

    带参数的main函数

    为了说明带参数的main函数,我们首先来学习一下有关命令行的概念。 命令行 在操作系统状态下,为执行某个程序而键入的一行字符称为命令行。...命令行的一般形式为: 命令名 参数1 参数2 参数3 ··· 参数n 参数之间以一个或多个空格隔开。...例如: C:\>copy[.exe] source.cpp c:\bak\prg.cpp 这个表示有三个字符串的命令行。...copy是DOS下的拷贝命令,是执行文件名,其功能就是将C盘根目录下的文件source.cpp拷贝到C盘bak子目录下,并改名为prg.cpp。...带参数的main函数 #include int main(int a,char *b[]) { ··· } 其中a是命令行字符串的个数,b是一个指针数组,数组中的每一个元素指针指向命令行中个字符串的首地址

    18010

    c专题之指针----指针与函数传参和输入、输出型参数

    一、指针与函数传参: 1、普通变量作为函数形参: (1)函数传参时,普通变量作为参数时,形参和实参名字可以相同也可以不 同,实际上都是用实参来替代相对应的形参的。...(5)全局变量传参最大的好处就是省略了函数传参的开销,所以效率要高一些;但是实战中用的最多的还是传参,如果参数很多传参开销非常大,通常的做法是把很多参数打包成一个结构体,然后传结构体变量指针进去...2、函数传参中使用const指针: (1)const一般用在函数参数列表中,用法是const int *p;(意义是指针变量p本身可变的,而p所指向的变量是不可变的)。...函数传参如果传的是普通变量(不是指针)那肯定是输入型参数;如果传指针就有2种可能性了,为了区别,经常的做法是:如果这个参数是做输入的(通常做输入的在函数内部只需要读取这个参数而不会需要更改它)就在指针前面加...const来修饰;如果函数形参是指针变量并且还没加const,那么就表示这个参数是用来做输出型参数的。

    2.1K20

    【C语言笔记】函数指针作为函数的参数

    函数指针有两种常用的用法,一种是作为结构体成员,关于函数指针作为结构体成员的用法可移步至上一篇【C语言笔记】函数指针作为结构体成员进行查看。另一种是函数指针作为函数的参数。...这一篇分享的是函数指针作为函数的参数。 一、函数指针作为函数的参数 函数指针可以作为一个参数传递给另一个函数。这时函数指针的使用就像普通的常量和变量一样。...当函数指针作为参数传递的时候,这时接收参数传递的函数通常需要根据这个指针调用这个函数。作为参数传递的函数指针通常表示回调函数(Callback Functions)。 1、什么是回调函数?...回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。 2、回调函数在实际中有什么作用?...return result; } 其中,fun_t是一个函数指针,其定义为: typedef int (*fun_t)(int, int); 该函数指针fun_t指向一个带两个int类型的形参、int

    10.7K12

    C++带参数的构造函数 | 有参构造函数

    C++带参数的构造函数 在C++中,程序员希望对不同的对象赋予不同的初值,可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数, 以实现不同的初始化。...C++构造函数首部的一般形式为  构造函数名(类型1 形参1,类型2 形参2,… ) 程序员是不能调用构造函数的,因此无法采用常规的调用函数的方法给出实参,实参是在定义对象时给出的。...如果数据成员是私有的, 或者类中有private或protected的成员,则不能用这种方法初始化。 案例:C++求体积,要求在类中用带参数的构造函数。...//定义长  }; Box::Box(int h,int w,int l)//在类外定义带参数的构造函数 {   height=h;   width=w;   length=l;  }  int Box...以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C++带参数的构造函数 | 有参构造函数 更多案例可以go公众号:C语言入门到精通

    4K64

    python 函数参数的传递(参数带星号的说明)

    python中函数参数的传递是通过赋值来传递的。...函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要有四种方式: 1.F(arg1,arg2,......这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的 值(实际参数),而且顺序必须相同,也就是说在这种调用方式中...3.F(*arg1) 上 面俩个方式是有多少个形参,就传进去多少个实参,但有时候会不确定有多少个参数,则此时第三种方式就比较有用,它以一个*加上形参名的方式来表示这个函数 的实参个数不定,可能为0个也可能为...传进去,最后把剩下的key=value这种形式的实参组成一个dictionary传给带俩个星号的形参,也就方式4。

    3.7K80

    python中如何定义函数的传入参数是option的_如何将几个参数列表传递给@ click.option…

    如果通过使用自定义选项类将列表格式化为python列表的字符串文字,则可以强制单击以获取多个列表参数: 自定义类: import click import ast class PythonLiteralOption...Syntax Tree模块将参数解析为python文字....自定义类用法: 要使用自定义类,请将cls参数传递给@ click.option()装饰器,如: @click.option('--option1', cls=PythonLiteralOption,...这是有效的,因为click是一个设计良好的OO框架. @ click.option()装饰器通常实例化click.Option对象,但允许使用cls参数覆盖此行为.因此,从我们自己的类中继承click.Option...并过度使用所需的方法是一个相对容易的事情.

    7.7K30

    Go语言之带参数的main函数

    本篇文章只用来讲解如何实现,一个带命令行的程序。对于这个功能的实现方法,有两种,一种是通过os包的os.Args来实现;另外一种通过flag包来实现。...方法一:os.Args实现 下面我们来写一个main函数,里面os.Args是一个[]string类型,在运行main函数的时候,命令行中的参数会被写入到os.Args数据中。...不过这样的参数不能够指定是什么类型,也不可以指定tag是什么,例如:-t, -h 等等。 1.直接将os.Args放到main函数中 output1: $ ./args1 output2: $ ....2.对于os.Args实现在argsfunc()中 os.Args不只可以在main函数中使用,同时也可以在其他函数中使用,如此看来,os.Args更像是一个全局变量,它应该是在main之前的时候,就将命令行中的参数写到.../args 0 0 0 1 20 30 备注:通过输出可以看出,在main函数中实现的参数和argsfunc函数中实现的os.Args并无差别。

    67020

    Python基础语法-函数-函数装饰器-带参数的装饰器

    带参数的装饰器装饰器可以接受参数,这意味着我们可以在运行时指定一些配置选项。...say_hello()在这个例子中,我们定义了一个名为“decorator_function”的装饰器函数,它接受一个消息作为参数并返回一个包装器函数。...但是,这次我们定义了一个内部函数“inner_wrapper”,该函数将在被装饰的函数执行之前和之后执行一些操作。然后,我们将带有参数的装饰器应用于我们的“say_hello”函数。...作为参数传递给装饰器函数,并将结果分配给“say_hello”函数,这意味着我们将“say_hello”函数传递给“decorator_function”函数作为第二个参数,并将“Hello World...传递给它作为第一个参数。最后,我们调用“say_hello”函数,它将在执行前和执行后打印一条消息,包括我们传递给装饰器函数的消息。

    1K30

    golang函数参数中接口指针的传递

    其实是一个很简单的问题,但是如果是之前一直写go的话可能没有意识到指针的本质,就走不出来了。 最近写代码的时候遇到了一个问题:有一个功能需要使用一个接口,有多个结构体实现了这个接口(经典OO场景)。...由于要和原有代码兼容,希望这个代码尽量表现的与原来的一样。 一个小demo,直接返回interface值来完成传递。看着很正常,但是因为是传值,所以与原有代码不太一致,也不够直观。...Name after set var a testA setsetName(&a,"test") fmt.Println(a.getName()) */ } 但如果试图使用接口直接作为函数参数的时候...:Cannot use '&t' (type *testDouble) as type *tt,非指针的情况下会报错Cannot use 't' (type testDouble) as type *tt...这里比较让人迷惑的地方在于,interface tt = testDouble是很容易成立的(编译器支持),可是指针层面却并不像想象中这样继续支持,强制转换也是不行的。

    2.3K40

    【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 VIII ....带参数名的参数列表 ---- 1 . 函数类型参数名称 : 参数列表中可以只是参数类型 , 也可以加上参数的变量名称 , 参数名称可以用于说明参数的含义 , 增加函数类型的理解性 ; 2 ....int (*p) (int*, int (*f)(int*)) , C 语言的函数 + 指针类型嵌套 int (*(*p2)[5])(int*) , 这个需要根据复杂指针解读技巧慢慢解读 , 要花费很长时间才能搞懂...带接收者类型的函数类型示例 : ① 带接收者类型的函数类型 : String....带接收者的函数类型 与 不带接收者的函数类型 之间的转换 ---- 带接收者的函数类型 , 可以转换为 不带接收者的函数类型 , 转换规则是 , 带接收者的函数类型的接收者 , 可以转换为不带接收者类型的第一个参数

    2.8K10

    go语言中函数参数传值还是传引用的思考

    于是乎,最近开始转向go编程,和以前写JAVA一样遇到了很多细节问题,以后有机会再多总结几篇,今天主要说一下go语言中,函数调用时参数传值和传引用的问题。...先说结论,golang中所有函数参数传递都是传值,slice、map和chan看上去像引用只是因为他们内部有指针或本身就是指针而已。...C++函数参数的传值和传引用 熟悉C++的程序员们应该都清楚,C++里传递函数参数的时候,传值还是传引用是函数声明的时候决定的。...C++中形参传指针也归类为传值,因为这里形参copy的是一个指针的副本,本质上还是传值,只不过和调用方的原始指针指向了同一块内存而已,所以函数内针对该内存进行的修改才会反应到外面,看起来像是“传引用”,...go函数参数一律传值 预声明类型如int,string等,以及普通的命名结构类型没什么好说的,无论是传递该类型的值还是指针作为函数参数,本质上都是传值,这点和C++一样。

    4.7K40

    Python基础语法-函数-函数装饰器-带参数的类装饰器

    带参数的类装饰器类装饰器还可以带参数。...例如,下面是一个带参数的类装饰器示例:class DecoratorClass: def __init__(self, message): self.message = message...然后,我们定义了一个名为“call”的特殊方法,它接受一个函数作为参数,并返回一个包装器函数。然后,我们将带有参数的类装饰器应用于我们的“say_hello”函数。我们将“Hello World!”...作为参数传递给装饰器类,并将结果分配给“say_hello”函数,这意味着我们将“say_hello”函数传递给“DecoratorClass”实例的“call”方法作为参数,并将“Hello World...传递给它作为第一个参数。最后,我们调用“say_hello”函数,它将在执行前和执行后打印两条消息,分别是装饰器类的前置和后置消息,包括我们传递给装饰器类的消息,以及我们原始函数的输出。

    1.3K20
    领券