c - 递增后取消引用指向 volatile int 的指针

标签 c pointers linux-device-driver volatile low-level-io

unsigned int addr = 0x1000;    
int temp = *((volatile int *) addr +  3);

它是否将递增的指针(即 addr + 3 * sizeof(int))视为指向 volatile int 的指针(同时解除引用)。换句话说,我可以期待 temp 中 say (0x1012) 的硬件更新内容吗?

最佳答案

是的。

指针算法不影响指针的类型,包括任何类型限定符。给定 A + B 形式的表达式,如果 A 具有指向 T 的类型限定指针并且 B 是整数类型,则表达式 A + B 也将是指向 T 的限定指针——相同的类型,相同的限定符。

来自 C 规范的 6.5.6.8(草案 n1570):

When an expression that has integer type is added to or subtracted from a pointer, the result has the type of the pointer operand.

关于c - 递增后取消引用指向 volatile int 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636432/

相关文章:

c - 如何将具有相同静态变量名的全局和局部存储在C 内部内存中?

c - 在 C 中解析 char 数组时遇到问题

c - 根据文件大小分配内存的数量不正确?

network-programming - 编写新的 Linux 设备驱动程序

linux-kernel - 为什么驱动程序编程更喜欢kzalloc而不是kmalloc

c - 以下c语言代码的正确输出是什么?

c - 如何将图像转换为 WORD (uint16) 数组?

c - 如何以编程方式确定android屏幕的bpp和像素颜色格式?

C. 正确处理指向函数的双指针,该函数分配一个结构并返回指向它的指针——在不同的函数中读取、显示、释放

c++ - 内部带有结构的类未实例化(立即出现段错误)