如何在c ++中读取这种指针?

时间:2010-08-18 13:40:49

标签: c++ syntax

CUnknown* (*)( LPUNKNOWN pUnk, HRESULT* phr );

似乎我一直在阅读这些复杂的指针时遇到了麻烦..

你怎么看?如果表达更长时间怎么办?

7 个答案:

答案 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>

链接美女:thisthis

答案 2 :(得分:1)

Clockwise Spiral Rule帮助我理解这样的事情。来自网站:

  1. 从未知元素开始,以螺旋/顺时针方向移动;当我们将以下元素替换为相应的英语陈述时,将其替换为:
  2. 继续以螺旋/顺时针方向执行此操作,直到所有令牌都被覆盖。

  3. 始终先解决括号内的任何内容!

    [X]或[]

  4. =>数组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;