c/c++语言开发共享volatile unsigned int * const

在以下代码行中, const关键字的目的是什么?

 volatile unsigned int * const UART0DR = (unsigned int *)0x10009000; 

我理解volatile unsigned int * bit,但为什么const就在那里?

    constvolatile被称为“类型限定符”。 他们的语法是C中最令人困惑的事情之一。

    首先,我们有一个普通变量的情况。 您通常在变量名之前编写类型限定符: const int x; ,但在变量名后面写它也很好: int const x; 。 意思是一样的,后面的语法就是混淆了。

    声明指针时,您会关注两种类型:指针本身的类型和指向的类型。 对于普通指针,这是微不足道的: int* x表示指针类型是指向int的指针,而指向的类型是int。

    如果指向的类型是const int,则指针被声明为const int* x 。 指针的类型为pointer-to-const-int,指向的类型为const int。 如果你想混淆每个人,你也可以写int const* x ,它是等价的。

    让我们说我们希望指针本身也是常量。 出于某种原因,我们希望阻止程序员更改指向的地址。 例如,指针可能存储在嵌入式系统的只读存储器中。 一个指向数据的常量指针,声明为int*const x; 在*之后使用const关键字。 在这种情况下,指向类型是int ,而不是 const int 。 (我尝试将const与*一起编写,中间没有空格,以强调指针是常量)

    如果我们希望指向类型也是常量,我们必须结合上面两个声明: const int*const x; 表示指向常量int的常量指针。

     const int x; // x is a constant data variable int const x; // x is a constant data variable const int* x; // x is a non-constant pointer to constant data int const* x; // x is a non-constant pointer to constant data int*const x; // x is a constant pointer to non-constant data const int*const x; // x is a constant pointer to constant data 

    在上面的例子中,我使用了类型限定符const 。 但volatile也是一个类型限定符,它的行为方式完全相同! 可以声明对易失性数据等的非易失性指针。

    最后,可以组合不同的类型限定符。 例如, volatile const int*是指向易失性const数据的非常量非易失性指针。 再一次,我们有很好的选择来混合这些的顺序混淆,所以我们也可以编写volatile int const *int volatile const * etc,它们都意味着相同。

    我理解volatile unsigned int * bit,但为什么const就在那里?

    这意味着指针是常量,这意味着指针不能(而不应该)指向任何其他地址。

    请注意以下构造:

     volatile unsigned int * const UART0DR = 

    指针在这里是不变的。


     volatile unsigned int const * UART0DR = 

    指向的地址在这里是不变的。


     volatile unsigned int const * const UART0DR = 

    在这种情况下,指向的地址以及指针是恒定的。

    来自https://cdecl.org

    需要了解更多c/c++开发分享volatile unsigned int * const,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     volatile unsigned int *const a => declare a as const pointer to volatile unsigned int 

      以上就是c/c++开发分享volatile unsigned int * const相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979335.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐