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

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

一、函数指针做函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., int); 定义函数 接收 pFun_add 类型的形参作为参数 , 该类型是 函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数中调用 函数指针 指向的 函数 ; // 传入函数指针...pFun = add 传入函数作为参数 , 也可以直接将 add 函数名 ( 函数地址 ) 作为 函数指针 参数 传递给函数 ; // 定义函数指针类型变量 pFun_add pFun = add...函数地址 ) 作为 函数指针 参数 // 传递给函数 caculate(add, 11, 12); 3、函数指针类型的本质 函数指针类型 本质 : 提前对任务 格式 进行约定 ; 函数参数类型 约定了...; 4、函数指针参数意义 函数指针参数意义 : 提高程序灵活性 : 通过使用函数指针作函数参数 , 这样可以 在 程序 运行时 动态地 设置 要调用的函数 , 提高了程序的灵活性 ; 作为回调函数

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

    【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )

    一维指针类型参数 II . 二维指针类型参数 I . 一维指针类型参数 ---- 1 ....结论 : ① 一维指针参数 : 传入一维指针 , 只能修改指向的内存的内容 ; 修改一维指针本身指向无意义 ; ② 二维指针参数 : 传入 二维指针 , 只能修改一维指针 及 以下的内容 ; 修改二维指针本身指向无意义...二维指针类型参数 ---- 1 ....二维指针参数 : 此处传入二维指针参数 , 二维指针的指向是副本改变没有任何意义 , 该二维指针副本 AVFormatContext **ps 参数指向的是 AVFormatContext *formatContext...结论 : 传入二维指针参数 , 二维指针本身修改无意义 , 修改二维指针指向的一维指针 , 可以影响外部的一维指针 ;

    42930

    C语言指针做函数参数指针做函数返回类型

    指针做函数参数: 在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。...用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以访问到函数外部的数据,并且这些数据不会随着函数的结束而被销毁。...像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。...,直接将原数组做修改了 数组是一系列数据的集合,无法通过参数将它们一次性传递到函数内部,如果希望在函数内部操作数组,必须传递数组指针。...int (*pf)(int, int); 通过将pf与括号中的“*”强制组合组合在一起,表示定义的pf是一个指针,然后与下面的“()”再次组合,表示的是该指针指向一个函数,括号里表示为int类型的参数,

    2.6K20

    C++指针作函数参数 | 指针实现由大到小

    C++指针作函数参数 在C++中,函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送给被调用函数的形参。 ...C++为了使在函数中改变了的变量值能被main函数所用,不能采取把要改变值的变量作为参数的办法, 而应该用指针变量作为函数参数。...和C语言一样,C++实参变量和形参变量之间的数据传递是单向的值传递方式,指针变量作函数参数也要遵循这一规则,调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。...函数的调用只可以得到一个返回值,而使用指针变量作函数参数,就可以通过指针变量改变主调函数中变量的值,相当于通过函数调用从被调用的函数中得到多个值。...经典案例:C++输入两个整数按大小顺序输出,要求用函数处理,而且用指针类型的数据作函数参数

    7352420

    js获取URL参数

    js获取地址栏的字段参数和字段值,通过js函数获取 例如: https://test.com/?name=roger https://test.com/hello?...name=roger 在本例中,我们有一个名为name的查询参数,其值为roger。 你可以有多个参数,像这样: https://test.com/hello?...除了has()、get()和getAll()之外,URLSearchParams API还提供了一些其他的方法,我们可以使用它们来遍历参数: forEach()迭代参数 entries()返回一个包含参数...key/values的迭代器 keys()返回包含参数键的迭代器 values()返回一个包含参数值的迭代器 其他改变参数的方法,在页面中运行的其他JavaScript中使用(它们不改变URL): append...()向对象追加一个新参数 delete()删除现有参数 set()设置参数的值 我们可以使用sort()对参数进行键值排序,并使用toString()方法从这些值生成查询字符串。

    46.3K00

    【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    数组参数指针参数 1....数组参数退化为指针参数的意义 ( 1 ) 数组参数退化的相关概念 ( 指针退化成数组 ) ( 2 ) 代码示例 ( 二维数组参数指针退化 | 外层指针退化 | 内层数组指针没有退化 ) 六....② &函数名 | 调用函数指针方法 : ① 函数指针变量名(参数) ② (*函数指针变量名)(参数) | 函数名 和 &函数名 是等价的 | 函数指针变量名(参数) 和 (*函数指针变量名)(参数)...数组参数 ( 1 ) 数组参数 概念 ( 退化成指针 | 需要带上数组长度作为 附属参数 ) 数组参数相关概念 : 1.数组作为参数时编译器行为 : 数组作为参数时, 编译器会将数组 退化成 指针,...数组参数指针参数 1.

    3.7K30

    【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )

    引用作为参数 VI . 引用 与 指针 对比 I ...., 如果不需要在 函数中 修改该引用变量的值 ( 指针指向的数据的值 ) , 就将该参数声明为常引用 , 这样能最大限度增加安全性 , 避免因为误操作导致不必要的问题出现 ; V ....引用作为参数 ---- C 语言中的参数 分类 : ① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ; ② 指针变量参数 : C...语言中 , 如果要让函数的参数可以将结果返回 , 则必须使用指针作为参数 ; C++ 中的引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数的情况 ,...使参数具有返回结果的能力 ; 作用及意义 : ① 具有返回值能力 : 使用引用作参数 , 可以将参数当做返回值使用 ; ② 提高参数传递效率 : 大型对象作参数时 , 使用引用类型 , 可以提高参数传递效率

    1.2K10

    函数指针做函数参数(回调函数)

    #define _CRT_SECURE_NO_WARNINGS #include //回调函数 //第一个参数是一个万能指针,用来接收用户输入的数据------因为我们不知道用户会输入什么样的数据类型...,因此用万能指针 //第二个参数是一个函数指针-------将data数据放入函数中进行操作 void PrintText(void* data,void(*myPrint)(void* )) { myPrint...(data); } //做回调函数的第二个参数 void myPrint(void *data) { //用void*类型指针赋值给其他类型指针要做强制类型转换 int* num = (int*)data...define _CRT_SECURE_NO_WARNINGS #include struct person { char ch[32]; int age; }; //回调函数 //第一个参数是一个万能指针...,用来接收用户输入的数据------因为我们不知道用户会输入什么样的数据类型,因此用万能指针 //第二个参数是一个函数指针-------将data数据放入函数中进行操作 void PrintText(void

    60620

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

    其实是一个很简单的问题,但是如果是之前一直写go的话可能没有意识到指针的本质,就走不出来了。 最近写代码的时候遇到了一个问题:有一个功能需要使用一个接口,有多个结构体实现了这个接口(经典OO场景)。...Name after set var a testA setsetName(&a,"test") fmt.Println(a.getName()) */ } 但如果试图使用接口直接作为函数参数的时候...&s,"tset2") fmt.Println(s.getName()) } 在s=&t的地方会报错:Cannot use '&t' (type *testDouble) as type *tt,非指针的情况下会报错...Cannot use 't' (type testDouble) as type *tt 这里比较让人迷惑的地方在于,interface tt = testDouble是很容易成立的(编译器支持),可是指针层面却并不像想象中这样继续支持

    2.3K40
    领券