当存在多个间接层时,如何解释volatile

时间:2018-06-04 09:58:09

标签: c pointers declaration volatile variable-declaration

假设我有以下

struct my_struct ** value;

我理解

之间的区别
struct my_struct volatile * other_value; // pointer is volatile

struct * volatile other_value; // what pointer points to is volatile

之间有什么区别
struct my_struct * volatile * value;  // call this (1)

struct my_struct ** volatile value;  // call this (2)

是否正确地说(1)意味着由值指向的指针是易失性的,(2)意味着值是易失性的,它指向的指针和指针指向的数据是不是易失性的?还是我倒退了?

更一般地考虑可能看起来像这样的东西

struct my_struct ***** volatile *** value

这个“系列”指针中的哪个指针是易失性指针?它是重定向的指针(这是正确的术语吗?)3次从值或4?换句话说,volatile总是在最右边的值/ ptr / statement上运行(这里的术语是什么?)。

例如

struct my_struct ******** volatile value

意味着价值是不稳定的

struct my_struct ******* volatile * value

表示指针值指向易失性

struct my_struct ****** volatile ** value

表示由值指向的指针指向的指针是volatile。等等。我的理解是否正确?

编辑: 我完全错了。 volatile适用于左边而不是右边。

1 个答案:

答案 0 :(得分:1)

经验法则是限定符(volatile或const等)坚持左侧的内容。

  

我理解

之间的区别      

struct my_struct volatile * other_value; // pointer is volatile

     

     

struct * volatile other_value; // what pointer points to is volatile
  ......或者我倒退了吗?

你倒退了。第一种情况使结构数据易失,第二种情况使指针本身易失。

  

struct my_struct ***** volatile *** value

这意味着左指针* volatile是易失性的。

通常,从右到左阅读C中的声明有助于:

  • other_value other_value ...
  • * other_value ...是指针......
  • struct my_struct volatile * other_value ...致struct my_struct volatile

另请注意,愚蠢的是,C允许将变量声明中的限定符放在任何位置。这意味着volatile int* x;int volatile* x;是等价的。对于为什么允许这样做没有合理的理由,它一直就是这样。