我对[dcl.array]/1感到困惑:
在声明T D中,D的格式为
D1 [常量表达式 opt ] attribute-specifier-seq opt
并且声明T D1中的标识符的类型是“ derived-declarator-type-list T”,则D的标识符的类型是数组类型; ...
考虑声明:
int (*p)[42];
该声明满足上述语法(并且不满足前面段落中描述的语法),因此本段应该适用,因此我们得出结论p
的类型是数组类型。但是,我们知道p
的类型是pointer to array of 42 int
,它是指针类型。
我错过了什么吗?或者pointer to array of 42 int
确实是数组类型?
答案 0 :(得分:2)
这是标准措辞的错误。当然,int (*p)[42];
不是数组类型,但是满足[dcl.array]/1中的语法(并且不满足[dcl.meaning]/5,[dcl.meaning]/6,[dcl.ptr]/1中的先前语法,[dcl.ref]/1或[dcl.mptr]/1),因此应使用[dcl.array] / 1。
我发布了一个editorial issue。
答案 1 :(得分:-1)
*p
你说
该声明符合上述语法。
当看到这种方式时,int
是一个包含42个p
元素的数组,这是正确的。这恰好符合int
的类型。它是指向" 42 {{1}} s"。