令人困惑的指针

hus*_*sik -1 c++ pointers

当我使用螺旋规则时,我在10个螺旋步骤内的下线混淆.有更快的方法吗?

// compiles in VC++ 2010
const void * const ** const volatile ***  const **** _foo_; 
Run Code Online (Sandbox Code Playgroud)

例如ptr是指向指向指针的指针的指针,它们都是const void但是其中2个是volatile void const

Pau*_*l R 13

cdecl说:

const void * const ** const volatile ***  const **** p
Run Code Online (Sandbox Code Playgroud)

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

  • 听起来很棒,不是吗!:d (4认同)

jro*_*rok 8

螺旋规则很容易!

在此输入图像描述

:-P


Mik*_*our 7

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

ptr是指向指向指向指针的const指针的指针,指针指向const volatile指向指向const指向const未知类型对象的指针的指针的指针的指针.

如果你遵循放任何的指引constvolatile预选赛第一类型说明符(即void const *),而再之前,它(即const void *),那么你就可以一直从右向左读的; 否则,当你到达左手边时,你有时会有轻微的打嗝.

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


Jam*_*nze 5

那是因为没有螺旋规则.基本上,您首先处理操作数,然后在左侧处理操作数,在两种情况下都向外处理,并遵循括号.而cv-qualifiers通常会限定他们左边的内容.由于此声明右侧没有操作数,因此它只是从右到左:指向指向指向指针的指针的指针指向指向const指针的指针指向指向const指针的指针指向(const)void.最后一个const是因为最后的const在左边没有任何东西,所以我们必须把声明看作是void const,而不是const void.除此之外,如果你忘记误导的螺旋,声明应该没有问题.