有人能给予我解释一下这行中第二个volatile关键字的用法吗
volatile unsigned int * volatile buffer;
我知道volatile关键字通常用于向编译器指示变量的值可以随时更改,而编译器在附近找到的代码不会采取任何行动。这可以防止编译器过度优化或缓存变量,确保始终从内存而不是从缓存的值访问变量。但是第二个呢?谢谢大家的帮助
luaexgnf1#
volatile unsigned int * volatile buffer;它的意思是:“volatile pointer to volatile unsigned int”指针和引用对象都是volatile
volatile
volatile unsigned int * volatile buffer; ^^^ ^^^ ^^^ ^^^-volatile pointer ^^^ ^^^-volatile unsigned int
^^^ ^^^
^^^ ^^^-volatile pointer
^^^
^^^-volatile unsigned int
oxcyiej72#
volatile int * x;
指针指向某个可以随时更改的整数,可以随时读取等等。然而,指针本身(这意味着:变量x)只有在程序赋值时才改变(它不是volatile)。
x
int * volatile y;
变量y(这意味着:指针本身)可以随时改变。但是,它指向一个整数值,只有当程序赋值时该整数值才会改变。
y
volatile int * volatile z;
变量z可以随时改变。它所指向的整数也可能随时发生变化。有了更多的间接级别,就有了更多的组合:
z
int * * volatile w1;volatile int * * w2;volatile int * * volatile w3;volatile int * volatile * w4;...
int * * volatile w1;
volatile int * * w2;
volatile int * * volatile w3;
volatile int * volatile * w4;
...
同样的原则也适用于const:
const
const int * a;int * const b;const int * const c;
const int * a;
int * const b;
const int * const c;
cgfeq70w3#
... *volatile表示指针变量本身是volatile的。这不是你通常需要使用的东西,因为编译器已经应该禁用对该指针变量的优化,因为它指向volatile数据。从理论上讲,如果指针是一个硬件地址寄存器,那么使指针本身成为volatile可能是有意义的。我不记得我曾经见过它使用,即使在低级别的嵌入式系统代码。像void func (volatile const int* n volatile const)这样带有过多限定符垃圾的代码通常只是一个指示器,表明程序员不太知道他们在做什么,或者他们喜欢“摆出”大多无用的语言特性的知识。...* const有很多用途,但那是另一个故事了。
... *volatile
void func (volatile const int* n volatile const)
...* const
3条答案
按热度按时间luaexgnf1#
volatile unsigned int * volatile buffer;
它的意思是:“volatile pointer to volatile unsigned int”
指针和引用对象都是
volatile
oxcyiej72#
指针指向某个可以随时更改的整数,可以随时读取等等。
然而,指针本身(这意味着:变量
x
)只有在程序赋值时才改变(它不是volatile
)。变量
y
(这意味着:指针本身)可以随时改变。但是,它指向一个整数值,只有当程序赋值时该整数值才会改变。
变量
z
可以随时改变。它所指向的整数也可能随时发生变化。有了更多的间接级别,就有了更多的组合:
同样的原则也适用于
const
:cgfeq70w3#
... *volatile
表示指针变量本身是volatile的。这不是你通常需要使用的东西,因为编译器已经应该禁用对该指针变量的优化,因为它指向volatile
数据。从理论上讲,如果指针是一个硬件地址寄存器,那么使指针本身成为
volatile
可能是有意义的。我不记得我曾经见过它使用,即使在低级别的嵌入式系统代码。像
void func (volatile const int* n volatile const)
这样带有过多限定符垃圾的代码通常只是一个指示器,表明程序员不太知道他们在做什么,或者他们喜欢“摆出”大多无用的语言特性的知识。...* const
有很多用途,但那是另一个故事了。