在以下代码行中, const
关键字的目的是什么?
volatile unsigned int * const UART0DR = (unsigned int *)0x10009000;
我理解volatile unsigned int *
bit,但为什么const
就在那里?
const
和volatile
被称为“类型限定符”。 他们的语法是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