我认为以下将给我 10 个 volatile 整数
volatile int foo[10];
但是,我认为以下内容不会做同样的事情。
volatile int* foo;
foo = malloc(sizeof(int)*10);
如果我对此有误以及如何使用 malloc 获得易变的项目数组,请纠正我。
谢谢。
最佳答案
int volatile * foo;
从右到左读取“foo 是一个指向 volatile int 的指针”
所以无论你通过 foo 访问什么 int,这个 int 都会是 volatile。
附言
int * volatile foo; // "foo is a volatile pointer to an int"
!=
volatile int * foo; // foo is a pointer to an int, volatile
意思是 foo 是易变的。第二种情况实际上只是一般从右到左规则的遗留物。 要吸取的教训是养成使用的习惯
char const * foo;
而不是更常见的
const char * foo;
如果你想要更复杂的东西,比如“指向函数的指针返回指向 int 的指针”,那么它就有意义了。
P.S.,这是一个大问题(也是我添加答案的主要原因):
我注意到您将“多线程”作为标签包含在内。您是否意识到 volatile 在多线程方面几乎/没有什么好处?
关于c++ - 如何在 C++ 中声明使用 malloc 创建的数组是 volatile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2304729/