C++中的函数指针

介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>

void printf1()
{
std::cout << "HelloWorld" << std::endl;
}

int main()
{
//函数指针
printf1();
auto a = printf1;//a的类型void(*)()
auto b = &printf1;
a();

std::cin.get();
}
名称 类型
&printf1 0x00007ff650e614c0 {CPPStudyByCmake.exe!printf1(void)} void(*)()
a 0x00007ff650e6107d {CPPStudyByCmake.exe!printf1(void)} void(*)()
b 0x00007ff650e6107d {CPPStudyByCmake.exe!printf1(void)} void(*)()

定义

1
2
3
void(*funcPtr1)();	//定义一个函数指针
funcPtr1 = printf1;
funcPtr1();//调用

使用typedef

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void printf2(int value)
{
std::cout << "Hello World.Value:" <<value<< std::endl;

}
int printf3(int value)
{
std::cout << "Hello World.Value:" <<(value+100)<< std::endl;
return (value + 100);
}


//使用typedef
typedef void(*test)(int);
test t1 = printf2;
t1(9);
typedef int(*te)(int);
te abc = printf3;
abc(9); //输出109

将函数指针作为入参传入函数中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void funcTest(int value)
{
std::cout << "Value : " << value << std::endl;
}
void forEach(const std::vector<int> vector,void(*func)(int))
{
for (int value : vector)
func(value);
}
int main()
{
std::vector<int> vectirs = { 3,4,5,1,2 };
forEach(vectirs,funcTest);
std::cin.get();
}

函数指针与lambda表达式(匿名函数)

1
2
3
4
//用法3、lambda表达式
forEach(vectirs, [](int value) {
std::cout << "lambda Value :" << value << std::endl;
});

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// CPPStudyByCmake.cpp: 定义应用程序的入口点。
//

#include <iostream>
#include <vector>
void printf1()
{
std::cout << "Hello World" << std::endl;
}

int printf2(int value)
{
std::cout << "Hello World.Value:" <<(value+100)<< std::endl;
return (value + 100);
}
//=====================================================================
void funcTest(int value)
{
std::cout << "Value : " << value << std::endl;
}
void forEach(const std::vector<int> vector,void(*func)(int))
{
for (int value : vector)
func(value);
}

int main()
{
//函数指针
//介绍
printf1();
//
void(*funcPtr1)(); //定义一个函数指针
funcPtr1 = printf1;
funcPtr1();
auto a = printf1;//a的类型void(*a)() void(*)()
auto b = &printf1;//b void(*)() &printf1 类型void(*)()
//a();//a()等价于printf1()

//使用typedef
typedef int(*test)(int);
test t1 = printf2; //printf2的指针类型是 int(*test)(int)
t1(9);

//用法2、使用函数指针作为传入参数
std::vector<int> vectirs = { 3,4,5,1,2 };
forEach(vectirs,funcTest);

//用法3、lambda表达式
forEach(vectirs, [](int value) {
std::cout << "lambda Value :" << value << std::endl;
});


std::cin.get();
}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2023 cyg
  • 访问人数: | 浏览次数: