指针变量
a) 一个整型数(An integer)int a;
b)一个指向整型数的指针( A pointer to an integer) int * a;
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)int ** a;
d)一个有10个整型数的数组( An array of 10 integers) int a[10];
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) int * a[10];
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers) int (* a)[10];
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function
that takes an integer as an argument and returns an integer) int (* a)(int);
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )int (*a[10])(int);
函数指针变量
//自行包含头文件
void MyFun(int x);
void (*FunP)(int ); //申明一个用以指向同样参数,返回值函数的指针变量。
2. 但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3. 为统一起见,FunP函数指针变量也可以FunP(10)的形式来调用。
4. 赋值时,即可FunP=&MyFun形式,也可FunP=MyFun。
上述代码的写法,随便你爱怎么着!
请这样理解吧!这可是有助于你对函数指针的应用喽!
最后——
补充说明一点:在函数的申明处:
void MyFun(int ); //不能写成void (*MyFun)(int )。
void (*FunP)(int ); //不能写成void FunP(int )。
(请看注释)这一点是要注意的。
typedef void (*FunType)(int ); //这样只是定义一个函数指针类型
FunType FunP; //然后用FunType类型来申明全局FunP变量
int main(int argc, char* argv[])
{
MyFun(10); //这里是调用MyFun(10);函数
(*MyFun)(10); //看,函数名MyFun也可以有这样的调用格式
FunP=MyFun; //将MyFun函数的地址赋给FunP变量
FunP=&MyFun; //将MyFun函数的地址赋给FunP变量
FunP(20); //这是通过函数指针变量来调用MyFun函数的。
(*FunP)(20); //这是通过函数指针变量来调用MyFun函数的。
return 0;
}
void MyFun(int x) //这里定义一个MyFun函数
{
printf(“%d/n”,x);
}