C 声明说明符和声明符
关于这个问题,我开始分析C 声明说明符和声明符,c,variables,static,declaration,storage-class-specifier,C,Variables,Static,Declaration,Storage Class Specifier,关于这个问题,我开始分析声明说明符和声明符的概念。以下是我的理解积累 声明 通常,C声明遵循声明说明符声明符的语法 声明说明符包括类型说明符、存储类说明符和类型限定符 声明符可以是变量、指针、函数和数组等 我假设的规则 声明说明符可以按任何顺序指定,例如 不能有多个存储类说明符 另一方面,可以有多个类型限定符 存储类说明符不得与声明符 问题 Q1:在常量指针的声明中,我看到了声明符和类型限定符的混合,如下所示 const int *const ptr; //Need justificat
声明说明符
和声明符
的概念。以下是我的理解积累
声明
- 通常,
声明遵循C
声明说明符声明符的语法代码>
包括声明说明符
、类型说明符
和存储类说明符
类型限定符
声明符可以是变量、指针、函数和数组等
可以按任何顺序指定,例如声明说明符
- 不能有多个
存储类说明符
- 另一方面,可以有多个
类型限定符
不得与声明符存储类说明符
声明符
和类型限定符
的混合,如下所示
const int *const ptr; //Need justification for the mix of declarator and type-specifier
问题2:可以有一个指向静态int
的指针。是否有可能为指针提供一个静态
存储类?表示指针是静态的
问题2:可以有一个指向static int的指针。是否有可能为指针提供一个静态存储类?表示指针是静态的
嗯,是的:
static T *a;
声明a
指向T
的指针<代码>具有静态存储持续时间
问题2:可以有一个指向static int的指针。是否有可能为指针提供一个静态存储类?表示指针是静态的
嗯,是的:
static T *a;
声明
a
指向T
的指针<代码>a具有静态存储持续时间。我不确定我是否完全理解您的第一个问题。就C++03语法而言,const
是一个cv限定符
cv限定符
可以出现在decl说明符seq
(作为一种特定的类型说明符
)中,这是声明的“公共”部分,也可以出现在init声明符列表
中,这是单个声明符的逗号分隔序列
语法特别规定了属于单个指针声明符的const
说明符必须跟在*
后面。第一个*
前面的常量说明符不被视为单个声明符的一部分。这意味着在这个例子中
int const *a, *b;
const
属于左侧:decl说明符seq
,声明的“公共”部分。即a
和b
都声明为int const*
。同时这个
int *a, const *b;
只是格式不正确,无法编译
你的第二个问题在我看来也不清楚。看来你倒过来了。您声称“可以有一个指向静态int
”的指针?不,无法声明“指向静态int
”的指针。但是,您可以声明指向int
的静态指针
static int *p;
在本例中,指针本身是静态的,正如您所希望的那样。我不确定我是否完全理解您的第一个问题。就C++03语法而言,const
是一个cv限定符
cv限定符
可以出现在decl说明符seq
(作为一种特定的类型说明符
)中,这是声明的“公共”部分,也可以出现在init声明符列表
中,这是单个声明符的逗号分隔序列
语法特别规定了属于单个指针声明符的const
说明符必须跟在*
后面。第一个*
前面的常量说明符不被视为单个声明符的一部分。这意味着在这个例子中
int const *a, *b;
const
属于左侧:decl说明符seq
,声明的“公共”部分。即a
和b
都声明为int const*
。同时这个
int *a, const *b;
只是格式不正确,无法编译
你的第二个问题在我看来也不清楚。看来你倒过来了。您声称“可以有一个指向静态int
”的指针?不,无法声明“指向静态int
”的指针。但是,您可以声明指向int
的静态指针
static int *p;
在本例中,指针本身是静态的,正如您所希望的那样。通常,C“声明”类似于此声明说明符声明符
这里,“声明说明符”包括类型说明符、存储类说明符和类型限定符
“声明器”可以是变量、指针、函数和数组等
错误,如:-[Error]应为声明说明符或字符串常量前的“…”
这种类型的错误会出现,原因是声明中存在问题。一般来说,C“声明”类似于此声明说明符声明符
这里,“声明说明符”包括类型说明符、存储类说明符和类型限定符
“声明器”可以是变量、指针、函数和数组等
错误,如:-[Error]应为声明说明符或字符串常量前的“…”
这种类型的错误会出现,其原因是声明中存在问题。在我看来,当我们声明一个常量指针时,声明符
和声明说明符
混合使用*ptr是一个声明器
。理想情况下,我设想声明说明符
是一个先行声明符。但在这种情况下,它是*const ptr
。那么这是一个例外情况吗?在我看来,当我们声明一个常量指针时,声明符
和声明符混合使用