参考问题Where in a declaration may a storage class specifier be placed?,我开始分析declaration-specifiers
和declarators
的概念。以下是我理解的积累。
C
声明遵循declaration-specifiers declarators;
declaration-specifiers
由type-specifiers
,storage-class-specifiers
和type-qualifiers
declarators
可以是变量,指针,函数和数组等。declaration-specifiers
可以按任何顺序指定,例如storage-class-specifier
type-qualifiers
storage-class-specifier
不得使用declarator
Q1:在常量指针的声明中,我看到declarator
和type-qualifier
混合如下
const int *const ptr; //Need justification for the mix of declarator and type-specifier
Q2:可以指向static int
。是否有可能提供指针static
存储类?表示指针是静态的。
答案 0 :(得分:3)
我不确定我是否完全理解你的第一个问题。就C ++ 03而言,语法const
是cv-qualifier
。 cv-qualifier
{(1}}(作为特定类型的decl-specifier-seq
)可以出现type-specifier
,这是声明的“常见”部分,也可以出现在init-declarator-list
中,const
以逗号分隔的单个声明符序列。
语法是专门制定的,属于单个指针声明符的*
说明符必须跟随 const
。在第一个*
之前的int const *a, *b;
说明符不被视为单个声明符的一部分。这意味着在这个例子中
const
decl-specifier-seq
属于左侧:a
,是声明中的“常见”部分。即b
和int const *
都声明为int *a, const *b;
。同时这个
static int
只是格式不正确,无法编译。
你的第二个问题对我来说也不清楚。好像你倒退了。您声称“可以指向static int
”?不,没有办法宣称“指向int
的指针”。您可以通过
static int *p;
的静态指针
{{1}}
在这种情况下,指针本身是静态的,如你所愿。
答案 1 :(得分:0)
Q2:可以有一个指向static int的指针。是否有可能为指针提供静态存储类?表示指针是静态的。
嗯,是的:
static T *a;
声明a
指向T
的指针。 a
具有静态存储持续时间。
答案 2 :(得分:0)
通常,C的“声明”就像这样的声明说明符声明符;
这里,“声明说明符”由类型说明符,存储类说明符和类型限定符组成。
“声明符”可以是变量,指针,函数和数组等。
错误,例如:-[错误]预期的声明说明符或字符串常量前的“ ...” 出现这种类型的错误,原因是声明中存在问题。