我对C语法有一个小问题。我知道这篇文章
volatile char * volatile foo;创建到易失性字符的易失性指针变量。
在我的理解中,第一个易失性意味着指针指向一个易失性元素,因为部分“易失性焦”。第二个易失性表示指针"foo“本身是易失性的。
这个假设正确吗?
什么将是
static volatile char * volatile bar;做?
假设上面的语句是正确的,它应该声明一个指向volatile+static字符的易失性指针。我的问题是,指针不需要知道目标变量是否是静态的。因此,这可能声明了一个指向易失性字符的static+volatile指针。
但是,假设这是正确的,第一个易失性将引用指针,第二个将引用指向的数据。
哪个是正确的假设?每种挥发性物质都会做些什么?
谢谢
发布于 2016-06-30 06:45:40
在我的理解中,第一个易失性意味着指针指向一个易失性元素,因为部分“易失性焦”。第二个易失性表示指针"foo“本身是易失性的。这个假设正确吗?
是。左边的每个类型限定符(volatile和/或const和/或restrict)都指向指向类型,而右侧的每个类型限定符都指向指针类型本身。这只适用于类型限定符。
static (以及extern、auto等)是存储类说明符,只涉及可变的持续时间和范围。它们总是引用声明的变量类型本身,在本例中是指针。声明指向数据的存储类说明符是没有意义的,因为该数据不是在该行上声明的,而是在另一行声明的。
还要注意的是,您总是可以声明一个指针变量,它的类型限定符比指向类型多,但不能用更少的类型来声明。在实现const正确性时,这一点很重要。
发布于 2016-06-30 06:41:03
因此,这可能声明了一个指向易失性字符的static+volatile指针。
当然,是的。
但是,假设这是正确的,第一个易失性将引用指针,第二个将指向指向
不是的。static只是意味着bar是静态的。这和不稳定没有任何关系。因此,例如,static char * volatile bar是易失性静态指针,而static volatile char *bar是指向易失性字符的静态指针。
https://stackoverflow.com/questions/38115439
复制相似问题