一、函数指针
函数存放在内存的代码区域内,它们同样有地址.如果我们有一个
int test(int a)
的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。
1、函数指针的定义方式
data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
例如:
int (*fp)(int a); // 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。
int
test
(
int
a
)
return
a
;
int
main
(
int
argc
,
const
char
*
argv
[
]
)
int
(
*
fp
)
(
int
a
)
;
fp
=
test
;
cout
<<
fp
(
2
)
<<
endl
;
return
0
;
注意:
函数指针所指向的函数一定要保持函数的返回值类型,函数参数个数,类型一致。
2、typedef 定义可以简化函数指针的定义
int
test
(
int
a
)
return
a
;
int
main
(
int
argc
,
const
char
*
argv
[
]
)
typedef
int
(
*
fp
)
(
int
a
)
;
fp
f
=
test
;
cout
<<
f
(
2
)
<<
endl
;
return
0
;
3、 函数指针同样是可以作为参数传递给函数的
int
test
(
int
a
)
return
a
-
1
;
int
test2
(
int
(
*
fun
)
(
int
)
,
int
b
)
int
c
=
fun
(
10
)
+
b
;
return
c
;
int
main
(
int
argc
,
const
char
*
argv
[
]
)
typedef
int
(
*
fp
)
(
int
a
)
;
fp
f
=
test
;
cout
<<
test2
(
f
,
1
)
<<
endl
;