C 我不明白为什么静态限定符应用于这里的x?

C 我不明白为什么静态限定符应用于这里的x?,c,pointers,qualifiers,C,Pointers,Qualifiers,在申报的情况下 const int *p; 说明符const应用于int,即对象p指向。 关于声明(1998年6月,嵌入式系统编程) 某些声明说明符不影响declarator-id的类型。相反,它们指定了直接应用于declarator-id的其他语义信息。例如,在: 关键字static不适用于x中指针指向的无符号长int对象。相反,它适用于x本身: 这声明x是一个静态对象,类型为“指向无符号长整数的指针的N个元素数组” 我不明白为什么应用于x的static?static应用于该类型没有意义。静

在申报的情况下

const int *p;
说明符
const
应用于
int
,即对象
p
指向。
关于声明(1998年6月,嵌入式系统编程)

某些声明说明符不影响declarator-id的类型。相反,它们指定了直接应用于declarator-id的其他语义信息。例如,在:

关键字
static
不适用于
x
中指针指向的
无符号长int
对象。相反,它适用于
x
本身:

这声明
x
是一个静态对象,类型为“指向无符号长整数的指针的N个元素数组”


我不明白为什么应用于
x
static

static应用于该类型没有意义。静态应用于x的存储位置/可见性(取决于其声明的位置)

存储类说明符和类型限定符是完全不同的东西。类型限定符(
const
volatile
restrict
)是类型的一部分,而存储类说明符(
typedef
extern
static
auto
register
)是声明的一部分


如果您指的是C99,请参阅6.7.1存储类说明符和6.7.3类型限定符。

您能想象将
静态
应用于
无符号长整型*
,而不是
x
?如果答案是“否”,那么顺序就不重要了,因为
static
const
是两个不同的东西。在
const
的情况下,它是不同的:
const int*p
int*const p
不同。您希望它应用于什么?变量
x
具有数组类型(这是
无符号长*[n]
部分,更准确地说,它是一个指向无符号long的
n
指针数组。然而
静态
与类型无关:它表示
x
的存储类(其他的有
extern
auto
register
)。如果你觉得这本书不清楚,你可能想读其他的书(我似乎也不清楚)看,例如@AlexandreC。是的,你是对的。很抱歉问了这么一个愚蠢的问题。@AlexandreC;是的。这就是我为什么感到困惑的原因。但现在清楚了。
static unsigned long int *x[N];
 ---------------------------   
/    \                    / \ 
static unsigned long int * x [N];