Typedef function pointer?
我正在学习如何动态加载DLL,但我不理解这一行
1 | typedef void (*FunctionFunc)(); |
我有几个问题。如果有人能回答,我会感激的。
所以我现在很困惑,你能为我澄清一下吗?
是一种语言构造,将一个名字与一个类型相关联。你也用同样的方式使用原始类型
1 2 3 | typedef int myinteger; typedef char *mystring; typedef void (*myfunc)(); |
使用它们
1 2 3 | myinteger i; // is equivalent to int i; mystring s; // is the same as char *s; myfunc f; // compile equally as void (*f)(); |
只要你能看到,你就可以用上面给出的定义来替换典型的名称。
指针对C+和C+中的语法功能和可行性的难度与EDOCX1&0)可以改善这些宣言的可行性。然而,句法是恰当的,因为函数不同于其他单纯类型,所以可能有一个返回值和参数,因此有时长度和函数指针的复合声明。
实用性可以开始以指针对函数阵列进行实用的运算,还有一些甚至更间接的气味。
回答你的三个问题
-
为什么是典型的?方便读取代码,特别是指针到功能或结构名称的代码。
-
句法看上去像ODD(在指针对功能声明中)这个句法不一定要读,至少在开始的时候。不易阅读的宣言
-
一个函数指针创建用于存储函数的存储器地址吗?是的,一个函数指针百叶窗的函数地址。在编译实际代码之前,编译器只扩展了类型定义。
Example:
1 2 3 4 5 6 7 8 9 | 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 |
在这种情况下,你被列为
Indeed the syntax does look odd,have a look at this:
1 2 3 | typedef void (*FunctionFunc) ( ); // ^ ^ ^ // return type type name arguments |
不,这个简单地告诉编译员,
ZZU1
《宣言》将在C+C+C+C+C+C+C+C+C+C+C+C+C+C+C+C+C+D+1+D+1+D+D+C+D+C+D+1+
以
如果你可以使用C+11,你可能想使用
1 | using FunctionFunc = std::function<void(int arg1, std::string arg2)>; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <stdio.h> #include <math.h> /* To define a new type name with typedef, follow these steps: 1. Write the statement as if a variable of the desired type were being declared. 2. Where the name of the declared variable would normally appear, substitute the new type name. 3. In front of everything, place the keyword typedef. */ // typedef a primitive data type typedef double distance; // typedef struct typedef struct{ int x; int y; } point; //typedef an array typedef point points[100]; points ps = {0}; // ps is an array of 100 point // typedef a function typedef distance (*distanceFun_p)(point,point) ; // TYPE_DEF distanceFun_p TO BE int (*distanceFun_p)(point,point) // prototype a function distance findDistance(point, point); int main(int argc, char const *argv[]) { // delcare a function pointer distanceFun_p func_p; // initialize the function pointer with a function address func_p = findDistance; // initialize two point variables point p1 = {0,0} , p2 = {1,1}; // call the function through the pointer distance d = func_p(p1,p2); printf("the distance is %f ", d ); return 0; } distance findDistance(point p1, point p2) { distance xdiff = p1.x - p2.x; distance ydiff = p1.y - p2.y; return sqrt( (xdiff * xdiff) + (ydiff * ydiff) ); } |