c - 如何声明具有 volatile 元素的静态数组?

标签 c arrays volatile

有关所用术语的说明:

对于静态数组,我的意思是静态分配内存的数组,例如:int x[10]。

问题

我需要声明一个包含 volatile 元素的静态数组。 如果我很好地理解 volatile 限定符是如何工作的,它应该是:

volatile uint8_t *x; // x is a pointer to volatile uint8_t
uint8_t *volatile x; // x is a volatile pointer to uint8_t
volatile uint8_t *volatile x; // x is a volatile pointer to volatile uint8_t 

好的,但现在我需要对静态数组做同样的事情。 我尝试过:

volatile uint8_t x[10];  // Only the pointer is decleared as volatile
uint8_t volatile x[10];  // Same as above
volatile uint8_t *x3[10]; // Casting problems and errors when I do ...  
*x3[0] = 1; // ... something like this. Moreover, I do not know if this...
            // ... statement declares the uint8_t element as volatile

谢谢!

更新

好的,正如我应该使用的评论中突出显示的那样:

volatile uint8_t x[10]

据我所知,问题不在于声明,而在于我的代码中该变量的使用。我将此元素传递给一个函数,其原型(prototype)为:

static void functionName(uint8_t *buffer, uint32_t size);

我这样调用该函数:

functionName(x, 10);

编译器报告:传递“functionName”参数 1 会丢弃指针目标类型中的“ volatile ”限定符

我无法更改函数原型(prototype),如何解决这个问题?

最佳答案

要声明一个包含 10 个 uint8_t 类型的 volatile 元素的静态数组,只需:

volatile uint8_t x[10];

请注意,这是一个数组的声明,在此步骤中与指针无关。

注意:稍后在代码中,如果使用 x,它可能会衰减为指向第一个 volatile 元素的指针,但在这种情况下,该指针将具有一个常量值,给定在链接步骤。指向值明显波动。

关于c - 如何声明具有 volatile 元素的静态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059531/

相关文章:

c - if 语句、函数评估和编译器优化

c++ - 从自定义构建的 Python 导入自定义模块失败

c - 使用 Eclipse SPARC bare-C 编译器未找到 "windows.h"

java - 如果变量仅被一个线程访问,但通过其他线程的 lambda 传递,Java 是否需要 volatile 关键字?

java - volatile 变量和其他变量

javascript - Javascript 数组分页

c - 最小化客户端处理 - C 套接字编程

c++ - '&' 在 C/C++ 中的作用是什么?它在 perl 中的等效运算符是什么?

javascript - 使用 jquery 添加/删除逗号分隔的输入值

java - Java 中的数组求和与平均值