指针声明 C 标准



有人可以向我解释以下来自 C 标准的话吗?无论我如何试图理解这一点,我都无法理解这一点,即使某人在 C 方面经验丰富,也应该如何理解这一点?

C 2018 6.7.6.1 1 说:

如果在声明">TD1"中,D1的形式为

* 类型限定符列表 选项 D

声明">T D"中为ident指定的类型为 ">派生声明器类型列表T",则为ident指定的类型是">派生声明符类型列表类型限定符列表指向T"。 对于列表中的每个类型限定符,ident都是一个限定指针。

首先考虑T D声明D中的标识符是派生自T的某种类型。可能没有添加任何内容;int foo宣布fooint。或者,声明符D可能包含括号[…]以便添加"数组",或者可能包含括号,以便添加"函数返回",或者可能包含星号,因此添加"指针",或者它可能具有这些组合(包括可能的重复)。所询问的文本说,插入*以使T DT *D通过在T之前插入"指针"来更改声明。例如,将int foo(void)更改为int *foo(void)会将类型从"函数返回int"更改为"函数返回指向int的指针"。

这是更详细的分析。

暂时忽略限定符,子句"如果在声明'T D1'中,D1具有形式 *类型限定符列表optD"告诉我们考虑形式为T *D的声明。

下一句,"声明'TD'中为标识指定的类型是'派生声明器类型列表T'",告诉我们考虑没有*T *D会是什么,就好像它只是T D一样。现在,在D内部,有一些标识符,称为identD可以是ident,也可以是数组声明符,如ident[3],或者函数声明符,ident(void),或者另一个指针声明符,*ident,或这些的组合,包括重复。不管它是什么,T D都宣称身份是某种东西。假设它声明的标识类型为">派生的东西T"。

该句子的最后一句,"那么为 ident 指定的类型是'派生声明器类型列表类型限定符列表指针指向T'",告诉我们,如果T D声明 ident 的类型是"派生的东西T",那么T *D声明ident的类型是">派生的东西指向T

"。 回到限定词,最后一句告诉我们指定位置的任何限定词(constrestrictvolatile和/或*D之间的_Atomic)都适用于标识

最新更新