c - 您不需要取消引用指针来对寄存器进行按位操作吗?

标签 c pointers bitwise-operators

while ((uart[2] & (1<<6)) == 0); 行下面的代码中检查硬件寄存器中是否已设置某个位。

我的问题是 - 代码创建了一个指针 *uart它指向地址0x00021000。如果你想&在 (1<<6) 中,您是否不必取消引用指针?

#define UART_BASE 0x00021000

void putstring(char *str) {

    volatile uint32_t *uart = (volatile uint32_t*) UART_BASE;

    while (1)
    {
        while (*str != '\0')
        {
            while ((uart[2] & (1<<6)) == 0);
            uart[1] = *str;
            str++;
        }
    }
}

最佳答案

在 C 语言中,x[y] 相当于 *(x+y)。因此,当您执行uart[2]时,您正在取消引用指针。

关于c - 您不需要取消引用指针来对寄存器进行按位操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694525/

相关文章:

c++ - zlib - 提取大条目

C语言。如何将字符串添加到链接列表中

bit-manipulation - 是否可以编写一个没有控制流和严格按位运算的两个整数相加的函数?

c - 我正在研究图的连通性。为什么我会遇到段错误 : 11?

objective-c - 为什么 Objective-C 不允许指向结构体的指针?

linux - 嵌入式linux中rootfs中有多个源文件时如何构建?

bitwise-operators - 如何进行位掩码操作Pharo?

c - 如何解决我的位移 C 代码中的以下错误?

c++ - 如何获取多维结构数组的长度?

c - 按数组中的数字删除数组,C