现在的位置: 首页 > 综合 > 正文

C指针变量,函数指针备忘

2013年09月20日 ⁄ 综合 ⁄ 共 1569字 ⁄ 字号 评论关闭

指针变量

       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 );
//申明一个用以指向同样参数,返回值函数的指针变量。

    1. 其实,MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。MyFun函数名是一个函数指针常量,而FunP是一个函数数指针变量,这是它们的关系。
    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);
}

抱歉!评论已关闭.