函数声明中的指针

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

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

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

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

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

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

4void *)())

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

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

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

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

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

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

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

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

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

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

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

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

  返回值:void *a)(int

  那么这个函数的定义:

  void *signalintvoid*func)(int))(int

原文地址:https://www.cnblogs.com/buptlyn/p/4158603.html