函数声明中的指针

int  a:

  a是一个int型变量

int  func():

  func是一个返回int类型的无参函数

int  *a:

  a是一个指向int类型变量的指针

int  *func():

  相当于int  *(func()),func是一个函数,返回值为指向整型的指针

  *不是用来定义func,说明返回值是指针

int (*func)():

  func是一个指针,指向一个返回值类型为int的无参函数

  *用来定义指针,与返回值无关

 

小结:

先判断是函数还是指针

函数:其后()里的是参数,函数名前所有符号都说明了返回值

指针:如果后面有(),说明是函数指针,不包括*的前面所有的符号说明了指向的函数的返回类型

 

关于类型转换:

例1: 某个类型a想转换成int a

  (int)a,即(int)表示向int的强制转换

例2: 某个类型a想转换成 int *a

  (int *)a,即(int *)表示向指向int的指针的强制转换

例3: 某个类型a想转换成int (*a)(int)

  (int (*)(int))a,即(int (*)(int))表示向 指向 以int为参数返回int型的函数 的指针 的强制转换

例4: (void (*)())

  添加变量名a,去掉最外面的括号得到:void (*a)()

  表示指向返回为void的无参函数的指针,

  所以原式表示向 指向返回void的无参函数的指针 的强制转换

例5: 将常数0强制转换为 指向 返回值为void的无参函数 的指针

  (void (*)())0 0被强制转换成一个函数指针

  如果 #define fp (void (*)())0

   则fp将成为一个指针,这个指针指向一个返回值为void的无参函数

  调用这个函数:(*fp)()

  即:(*(void (*)())0)()

  解读:将0强制转换成函数指针后再解引用调用这个函数

例6: 如果一个函数的返回值是一个函数指针

  这个函数名:signal,函数参数:(int,void (*func)(int))

  返回值:void (*a)(int)

  那么这个函数的定义:

  void (*signal(int,void(*func)(int))(int)

posted @ 2014-12-11 21:59  bupt_lyn  阅读(561)  评论(0)    收藏  举报