typedef的意义和函数指针

再谈typedef(重点为函数指针)

http://zjf30366.blog.163.com/blog/static/411164582009817101543293/

typedef是什么,怎么用

表面上typedef是给某一类型起别名,例如:

typedef int* p;
p pointer;

实际上,在C99标准中是这样诠释的:"In a declaration whose storage-class specifier is typedef, each declarator defines an identifier to be a typedef name that denotes the type specified for the identifier in the way described in xx"

参照这段描述,并拿typedef  int    *p作为例子来理解:在一个声明中,如果有存储类说明符typedef的修饰,标识符p将被定义为了一个typedef name,这个typedef name表示(denotes)一个类型,什么类型呢?就是int *p这个声明(declarator)中标识符(indentifier)p的类型(int*)。

下面举例说明:

例1:

typedef double MYDOUBLE;
MYDOUBLE a;

去掉typedef,上面的语句是声明一个double类型的变量MYDOUBLE。加上typedef,MYDOUBLE这个标识符被定义为一个typedef-name,即去掉typedef所声明变量MYDOUBLE的类型,也就是double。

例2:

typedef int* Func(int);
Func *fptr;

去掉typedef,上面的语句声明一个函数名(标识符)为Func,返回值是指向int类型的指针,参数是int类型的函数。所以原语句会把Func定义为一个typedef-name,它表示的类型是返回值为int指针,参数是int的函数。

例3:

typedef int (*PFunc)(int);
PFunc fptr;

去掉typedef,上面的语句声明一个函数指针PFunc,该函数指针指向一个返回值和参数都是int的函数。所以原语句把PFunc这个标识符定义为一个typedef-name,它用来声明返回值和参数都是int的函数的函数指针。

函数指针

https://blog.csdn.net/zj1131190425/article/details/92065897

获取函数指针:

函数的地址就是函数名,传递函数名即可。

声明函数指针:

声明指针时,必须指定指针指向的数据类型。对于指向函数的指针,要指定函数类型(返回值类型和函数的参数列表)。

double cal(int);   // prototype
double (*pf)(int);   // 指针pf指向的函数, 输入参数为int,返回值为double 
pf = cal;    // 指针赋值

使用指针调用函数

double y = cal(5);   // 通过函数调用
double y = (*pf)(5);   // 通过指针调用 推荐的写法 
double y = pf(5);     // 这样也对, 但是不推荐这样写

将函数指针作为函数的参数传递

void estimate(int lines, double (*pf)(int));  // 函数指针作为参数传递 
原文地址:https://www.cnblogs.com/BoysCryToo/p/13331407.html