CUnknown* (*)( LPUNKNOWN pUnk, HRESULT* phr );
似乎我一直在阅读这些复杂的指针时遇到了麻烦..
你怎么看?如果表达更长时间怎么办?
答案 0 :(得分:3)
每个人都说过它是什么,但你问如何阅读它。
函数指针语法如下:
RETURN_VALUE (*POINTER_NAME) (ARGUMENT LIST)
所以
foo (*bar) (baz)
是指向baz
并返回foo
的函数的指针,指针名为bar
。
如果你只想写一个函数指针的类型,而不是声明一个,你只需要省略名称,例如
RETURN_VALUE (*) (ARGUMENT_LIST)
如你所见。
对于解析难以理解的C声明,在大多数Linux和类Unix系统上都有一个名为cdecl
的好程序,并且可以作为Web应用程序使用:http://cdecl.org/
答案 1 :(得分:3)
我从书本和大学学到的东西是从中间开始,然后来回向前走。诀窍只是缓慢地做,并知道实际中间位置。
你有一个
CUnknown* (*)( LPUNKNOWN pUnk, HRESULT* phr );
这是一个指针(*)
现在我们走对了:它是一个指向函数的指针,因为下一个是(
该函数的参数是LPUNKNOWN
和指向HRESULT
的指针,就是这样。
现在我们左转:该函数返回指向CUnknown
的指针。
所以,正如大家所说,它是一个指向函数的指针,该函数接受两个参数-a LPUNKNOWN
和指向HRESULT
的指针 - 并返回指向CUnknown
的指针。 / p>
答案 2 :(得分:1)
Clockwise Spiral Rule帮助我理解这样的事情。来自网站:
继续以螺旋/顺时针方向执行此操作,直到所有令牌都被覆盖。
始终先解决括号内的任何内容!
[X]或[]
=>数组X大小为......或数组未定义大小......
(type1, type2)
=>函数传递type1和type2返回...
*
=>指针... ...
答案 3 :(得分:0)
它是一个指向函数的指针,该函数接受参数'LPUNKNOWN pUnk,HRESULT * phr'并返回指向CUnknown的指针。
答案 4 :(得分:0)
它是一个带有两个参数的函数指针,它返回一个CUnknown *
答案 5 :(得分:0)
我认为这是指向一个函数的指针,该函数采用LPUNKNOWN和指向HRESULT的指针,返回指向CUnknown的指针
答案 6 :(得分:0)
对于某些功能:
int f(int a, int& b, int* c);
表达式的类型:
&f
或等同地:
f
时:
int(*)(int, int&, int*)
一个简单的方法是记住这个函数指针类型说明符就像一个函数声明,除了名称替换为(*)
。您还可以执行typedef
:
typedef int(*ftype)(int, int&, int*);
现在你可以写:
ftype func = f;
而不是:
int(*func)(int, int&, int*) = f;