typedef
是将名称与类型相关联的语言构造。
例如,您可以使用与原始类型相同的方式来使用它
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
使用它们像
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
如您所见,您可以将typedef名称替换为上面给出的定义。
难点在于在C和C ++中指向函数语法和可读性的指针,并且typedef
可以提高此类声明的可读性。但是,语法是适当的,因为与其他更简单的类型不同,函数可能具有返回值和参数,因此有时会冗长而复杂的函数指针声明。
使用指向函数数组的指针以及其他一些更间接的方式时,可读性可能开始变得非常棘手。
回答你的三个问题
为什么要使用typedef?
简化代码阅读-尤其是指向函数或结构名称的指针。
语法看起来很奇怪(在指向函数声明的指针中)
,至少在开始时,语法并不明显。typedef
相反,使用声明可以简化阅读
是否创建了函数指针来存储函数的内存地址?
是的,函数指针存储函数的地址。这与typedef
仅简化程序的编写/阅读的构造无关;编译器只是在编译实际代码之前扩展typedef定义。
例:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456