令人困惑的指针

时间:2012-08-13 13:51:17

标签: c++ pointers

当我使用螺旋规则时,我在10个螺旋步骤内的下线处感到困惑。有更快的方法吗?

// compiles in VC++ 2010
const void * const ** const volatile ***  const **** _foo_; 

例如 ptr是一个指向指向指针的指针的指针,所有这些指针都是const void但其中有2个是volatile void

4 个答案:

答案 0 :(得分:13)

cdecl says

const void * const ** const volatile ***  const **** p
  

声明p作为指向指向指向指针的指针指向const指针指向指向const指针的指针指向指向const指针的const指针

答案 1 :(得分:8)

螺旋规则很容易!

enter image description here

: - P

答案 2 :(得分:7)

使用指针和引用声明,您只需从右向左阅读:

ptr是一个指向指针的指针的指针,指针指向指向指向指向指针的const指针的指针的指针的const volatile指针const指向未知类型的const对象。

如果您遵循在之后放置任何constvolatile限定符第一个类型说明符(即void const *)的指导原则,而不是之前 / em> it(即const void *),那么你可以从右到左一致地阅读;否则,当你到达左手边时,你有时会有轻微的打嗝。

螺旋式"规则"偶尔对涉及数组或函数的声明很有用,其中声明的名称不是声明中的最后一个。在这种情况下,名称后面没有任何内容,它会退化为从右向左阅读。

答案 3 :(得分:5)

那是因为没有螺旋规则。基本上,您处理操作数 在右边,然后在左边,在两种情况下向外工作,和 尊重括号。而且cv-qualifiers通常符合条件 他们的左边。由于此声明右侧没有操作数, 它只是从右到左:指向指向指针的指针的指针 const指针指向指向const指针的指针的指针 to const指向(const)void的指针。最后一个const是因为最后的 const左边没有任何东西,所以我们必须对待 声明好像是void const,而不是const void。其他 除此之外,声明应该没有问题,如果你忘了 关于被误导的螺旋。