c++ 函数指针 指针函数 void型指针

一、void型指针

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 myFun(int x);                       //这个声明也可写成:void myFun( int );
void (*funP)(int );                      //定义一个指向函数的指针,也可写void(*funP)(int x),但习惯上一般不这样。
 
int main(int argc, char* argv[])
{
    myFun(10);                           //这是直接调用myFun函数。
 
    funP = &myFun;                        //将myFun函数的地址赋给funP变量,也可以用funP = myFun.
    (*funP)(20);                        //这是通过函数指针变量funP来调用myFun函数的。
    funP(30);                           //也可以这样调用函数。
 
    return 0;
}
 
void myFun(int x)
{
    cout << x << endl;
}

/*
输出:

10
20
30
*/

 

例2:

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
*/

三、void*和函数指针综合

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);
}
posted @ 2012-09-13 15:46  helloweworld  阅读(1403)  评论(0编辑  收藏  举报