c++ - 如何在 C++ 中声明使用 malloc 创建的数组是 volatile

标签 c++ multithreading arrays malloc volatile

我认为以下将给我 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/

相关文章:

C++ toString 输出整数

arrays - 如何定义线程安全数组?

java - 在Java中,多个线程想要操作一个对象,如何让一个对象操作该对象,而其他线程等待工作完成?

arrays - 如何过滤结构数组?

php - 如何从中删除空格和空白逗号?

C++ : calling an abstract base class constructor/undefined symbol in shared object

c++ - 返回一个 vector ,这里应用的是 RVO 还是 move 构造函数?

c++ - Visual Studio 跨平台生成文件项目,找不到命令

Java让 hibernate 线程在线程池中工作

arrays - Swift Array 按属性交集