Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 声明说明符和声明符_C_Variables_Static_Declaration_Storage Class Specifier - Fatal编程技术网

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
    声明遵循
    声明说明符声明符的语法
  • 声明说明符
    包括
    类型说明符
    存储类说明符
    类型限定符
  • 声明符可以是变量、指针、函数和数组等
我假设的规则
  • 声明说明符
    可以按任何顺序指定,例如
  • 不能有多个
    存储类说明符
  • 另一方面,可以有多个
    类型限定符
  • 存储类说明符
    不得与声明符
问题 Q1:在常量指针的声明中,我看到了
声明符
类型限定符
的混合,如下所示

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
。那么这是一个例外情况吗?在我看来,当我们声明一个常量指针时,
声明符
声明符混合使用