添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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);
}