关于使用指定表述描述C语言声明`int * name[4]`的技术问询
如何用C17标准的声明规则描述
int * name[4]? 嗨,我来帮你用C17标准里的官方表述规则拆解这个声明。C17标准的6.7.6.2第3款专门定义了数组类型的声明格式,先给你列出来这段规则原文:
如果声明的形式为“
T D1”,其中D1属于以下形式之一:
D [类型限定符列表可选 赋值表达式可选]
D [类型限定符列表可选 赋值表达式]
D [(注:此处原文存在截断,但基于现有规则足以分析目标声明)
现在把int * name[4]套进这个“T D1”的模板里:
- 这里的
T是int *,也就是指向int类型的指针; D1是name[4],完美匹配规则里的第二种形式:D [ 类型限定符列表可选 赋值表达式 ]——其中D是name,赋值表达式是4(用来指定数组的元素数量),而且没有添加任何类型限定符(比如const、volatile这类)。
按照C标准的声明解读逻辑,数组的优先级高于指针,所以用标准表述来描述这个声明就是:
声明
int * name[4]将标识符name定义为一个包含4个元素的数组,数组的每个元素类型为指向int类型的指针;数组的元素数量由赋值表达式4指定,声明中未使用类型限定符。
备注:内容来源于stack exchange,提问作者ALICEZzz




