1、void型指针也称为无类型指针,可以把任意类型的指针值赋给它;
2、但若加void型指针付给其他类型的指针变量时,必须做强制类型转换。
3、void类型指针主要用途是编写通用的函数。
二、函数指针(
指向函数的指针
)
例1:void myFun(int x);是函数声明。void (*funp)(int);是定义一个指向函数的指针。
注:函数指针——指向函数的指针,指针函数——函数的返回值是指针。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include
<iostream>
using
namespace
std;
void
m
yFun
(
int
x);
//
这个声明也可写成:
void myFun(
int
);
void
(*funP)(
int
);
//定义一个指向函数的指针,也可写
成
void(*funP)(
int
x)
,但习惯上一般不这样。
int
main
(
int
argc,
char
* argv[])
{
myFun(10);
//
这是直接调用m
yFun
函数。
funP = &myFun;
//
将m
yFun
函数的地址赋给f
unP
变量,也可以用f
unP = myFun.
(*funP)(20);
//
这是通过函数指针变量f
unP
来调用m
yFun
函数的。
funP(30);
//
也可以这样调用函数。
return
0;
}
void
m
yFun
(
int
x)
{
cout << x <<
endl
;
}
/*
输出:
10
20
30
*/
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
#include
<iostream>
using
namespace
std;
void
myFun
(
int
x
);
void
mySecondFun
(
int
x);
void
(*funP)(
int
);
int
main
(
int
argc,
char
* argv[])
{
funP = myFun;
funP(10);
funP = mySecondFun;
funP(20);
return
0;
}
void
myFun
(
int
x
)
{
cout <<
"myFun"
<<
x
<<
endl
;
}
void
mySecondFun
(
int
x)
{
cout <<
"mySecondFun"
<< x <<
endl
;
}
/*
输出:
myFun10
mySecondFun20
*/
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
#include
<iostream>
#include
<string.h>
using
namespace
std;
int
myDiffInt
(
const
void
* a,
const
void
* b);
int
myDiffChar
(
const
void
* a,
const
void
* b);
//
在这两个函数的参数可能是不同类型指针的情况下,
//
如果参数不定义为
void*
,就不能用一个函数指针调用这两个函数
int
(*myFunP)(
const
void
*,
const
void
*);
//
指向函数的指针
int
main
(
int
argc,
char
* argv[])
{
int
a = 3;
int
b = 1;
char
c1 =
'b'
;
char
c2 =
'a'
;
myFunP = myDiffInt;
cout << myFunP(&a,&b) <<
endl
;
myFunP = myDiffChar;
cout << myFunP(&c1,&c2) <<
endl
;
}
int
myDiffInt
(
const
void
* a,
const
void
* b)
{
return
*(
int
*)a - *(
int
*)b;
}
int
myDiffChar
(
const
void
* a,
const
void
* b)
{
return
strcmp
((
char
*)a,(
char
*)b);
}