C++

C++函数的3种调用方式: 函数名称,函数指针与函数引用

内容概要: c++ 函数调用方式

更多关于C++编程语言的内容,可以查看我的C++专栏Java,JavaScript,Python等编程语言有兴趣的,也可以看看编程语言 也欢迎大家来论坛与我讨论

c++ 函数调用方式

C++中主要有两类名字, 变量名和函数名(还有类名和结构体名等等)。 名字或者标识符要能唯一代表某一段内存区域。

变量可以通过变量名,指针,引用几种方式直接或者间接的访问,类型的函数也可以通过函数名,函数指针,函数引用几种方式访问

1.通过函数名访问

void fuck(int a);



int main()

{ 

    fuck(3);
    return 0;

}

2. 通过函数指针访函数

函数指针指向函数,也指向某个特定的类型,函数的类型由其返回类型及形参表确定,与函数名无关

void fuck(int a);

voif (*p) (int a);



int main()

{

     p= fuck;  //or p =&fuck;

     p(3);

     (*p)(3);



}

remark:

  • 1.在引用函数名但又没有调用该函数时,函数名将被自动解释为函数指针,故p = fuck 和p = &fuck 是等效的;
  • 2. 使用函数指针调用函数时,可以不需要加解引用,故 p(3) 和(*p)(3) 是等价的;

3. 函数引用

函数引用在一般的书籍中没有介绍, 但通过变量有引用类型可以推断,存在函数引用

void (&r) (int ) = fuck;
// 定义一个形参为int ,返回值为void 的函数的引用,该引用指向fuck()函数

PS. 引用需在定义时初始化

4. 示例

以下一个实例覆盖到上面全部的点:

#include<iostream>
#include<vector>
#include<string>
#include<cstdlib>
using namespace std;






void fuck(int a)
{
    cout<<a<<endl;
}


void (*p1) (int );
void (*p2) (int );
void (&p3) (int ) = fuck;  //函数引用


int main(int argc, char* argv[])
{
  fuck(1);


  p1=fuck;
  p1(2);
  (*p1)(3);


  p2= &fuck;
  p2(4);
  (*p2)(5);


  p3(6);


  return 0;
}

程序会输出:

1

2

3

4

5

6

总结

函数其实也可以看作一种类型, 由返回类型和形参表确定的类型, 故函数也向普通类型一样有函数名,函数指针,函数引用三种使用方式

函数本身可以做另一个函数的形式参数, 比较常见的是函数指针(引用)作为形参,各模块间交换使用的回调函数就是这样实现的。

void test(int a, void (*p) (int ) ,void(&p2) (int ));

test () 函数有三个参数, 一个Int ,一个函数指针,一个函数引用。

函数指针和函数引用做形参时,差别和普通的指针形参和引用形参。  指针形参多了一个拷贝指针副本的开销, 且是通过指针间接操作实参。引用传递的是实参的别名。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top