【问题标题】:I do not understand why the qualifier static applied to x here?我不明白为什么限定词 static 在这里应用于 x ?
【发布时间】:2013-07-18 21:06:54
【问题描述】:

在声明的情况下;

const int *p;

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

一些声明说明符对 declarator-id 的类型没有贡献。相反,它们指定直接应用于 declarator-id 的其他语义信息。例如,在:

static unsigned long int *x[N];

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

 ---------------------------   
/    \                    / \ 
static unsigned long int * x [N];

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

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

【问题讨论】:

  • 您能想象将static 应用于unsigned long int* 而不是x?如果答案是“否”,那么顺序无关紧要,因为 staticconst 是两个不同的东西。 const 的情况不同:const int* pint* const p 不同。
  • 您希望它应用于什么?
  • 变量x 具有数组类型(这是unsigned long *[n] 部分,更准确地说是n 指向unsigned long 指针的数组。但是static 与类型无关: 它表示x存储类(其他是externautoregister)。如果你觉得这本书不清楚,你可能想阅读其他书籍(似乎不清楚对我也是),参见例如stackoverflow.com/questions/562303/…
  • @AlexandreC。是的,你是对的。抱歉问了这么愚蠢的问题。
  • @AlexandreC.;是的。这就是为什么我很困惑。但现在很清楚了。

标签: c pointers qualifiers


【解决方案1】:

static 不适用于该类型。 static 适用于 x 的存储位置/可见性(取决于其声明的位置)

【讨论】:

    【解决方案2】:

    存储类说明符和类型限定符是完全不同的东西。类型限定符(constvolatilerestrict)是类型的一部分,而存储类说明符(typedefexternstaticautoregister)是声明的一部分。

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

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 2022-11-16
      • 1970-01-01
      • 2021-04-28
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      相关资源
      最近更新 更多