【问题标题】:volatile pointer to volatile char. additional static keyword指向 volatile char 的 volatile 指针。附加静态关键字
【发布时间】:2016-06-30 06:27:06
【问题描述】:

我对 C 语法有一个小问题。 我知道写作

volatile char * volatile foo;

创建一个指向 volatile char 的 volatile 指针变量。

在我的理解中,第一个 volatile 意味着指针指向一个 volatile 元素,因为“volatile char”部分。 第二个 volatile 表示指针“foo”本身是 volatile。

这个假设正确吗?

会发生什么

static volatile char * volatile bar;

做吗?

假设上述语句是正确的,它应该声明一个指向 volatile+static char 的 volatile 指针。我的问题是,知道目标变量是否为静态的指针与指针无关。所以这可能声明了一个指向 volatile char 的 static+volatile 指针。

但是,假设这是正确的,第一个 volatile 将引用指针,第二个将引用指向的数据。

哪个是正确的假设? 每个 volatile 的作用是什么?

谢谢

【问题讨论】:

    标签: c pointers static volatile


    【解决方案1】:

    在我的理解中,第一个 volatile 意味着指针指向一个 volatile 元素,因为“volatile char”部分。第二个易失性意味着指针“foo”本身是易失性的。这个假设正确吗?

    是的。 * 左侧的每个类型限定符volatile 和/或const 和/或restrict)指的是指向的类型,而右侧指的是指针类型本身。这仅适用于类型限定符。

    static(以及 extern、auto 等)是存储类说明符,仅与可变持续时间和范围有关。它们总是引用声明的变量类型本身,在这种情况下是指针。为指向的数据声明存储类说明符是没有意义的,因为该数据不是在这一行声明的,而是在其他行声明的。

    还请注意,您始终可以使用比指向类型更多的类型限定符来声明指针变量,但不能使用更少的类型限定符。在实现 const 正确性时了解这一点很重要。

    【讨论】:

    • 谢谢。帮了我很多:D
    【解决方案2】:

    所以这可能声明了一个指向 volatile char 的 static+volatile 指针

    当然,是的。

    但是,假设这是正确的,第一个 volatile 将指向指针,第二个指向指向的数据

    不。 static 只是意味着 bar 是静态的。它与易失性无关。因此,例如,static char * volatile bar 是 volatile 静态指针,而 static volatile char *bar 是指向 volatile char 的静态指针。

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多