C 如果某事物是常量volatile int,它是否可以根据变量的状态进行更改?
我有一个C 如果某事物是常量volatile int,它是否可以根据变量的状态进行更改?,c,freestanding,gnu99,C,Freestanding,Gnu99,我有一个无符号常量volatile short int*。我希望它是(x+y),在定义时设置为0。但是,如果由于某种原因y变为5,我希望无符号常量volatile short int*也会改变 这在C语言中可能吗 (注意:我使用的是带有GNU扩展的独立C99模式,我的意思是它可以自动更改,而不是使用函数。)无法使变量基于其他变量自动更新,如C中的变量 而不是在变量中存储 x和 y>代码>,您应该考虑只需要在需要时再计算一个函数的函数。添加速度应该相当快: int get_the_sum() {
无符号常量volatile short int*
。我希望它是(x+y),在定义时设置为0。但是,如果由于某种原因y变为5,我希望无符号常量volatile short int*
也会改变
这在C语言中可能吗
(注意:我使用的是带有GNU扩展的独立C99模式,我的意思是它可以自动更改,而不是使用函数。)无法使变量基于其他变量自动更新,如C中的变量 <>而不是在变量中存储<代码> x和<代码> y>代码>,您应该考虑只需要在需要时再计算一个函数的函数。添加速度应该相当快:
int get_the_sum()
{
return x + y;
}
可选地,您可以考虑将<代码> x和<代码> y>代码>为静态变量,这些变量只能用SETER函数来改变。
x
和y
的setter函数将负责更新任何需要更新的变量。如果不进一步了解您的应用程序,很难判断这种方法是否值得
void change_y(int new_y)
{
y = new_y;
sum = x + y;
}
假设
y
被声明为
volatile unsigned short int y = -x;
(或等效值),并且y
的值最初不同于5,您可以定义
unsigned const volatile short int *p = &y;
这将满足您提出的要求,尽管它强加了您未指定的条件。除了上面明确给出的那些,它假设您需要更改以响应y
中的更改,但不提及响应x
中的更改,这意味着指向的值实际上不需要响应x
中的更改
当然,我倾向于认为这根本不能代表你真正的意思。这不能在C中实现。指针指的是内存中的位置,但表达式的值(如
x+y
)不在内存中。C中的变量不会分别更新其值:没有依赖关系系统(与电子表格不同)。另外,如果您不希望它是常量,请删除常量
。而且const
与volatile
不矛盾吗?指针不是const
限定的,所以是的,当然允许更改。@WeatherVane否,const与volatile不矛盾@Olaf您的意思是,它是const
限定的指针,而不是它指向的对象吗?OP并没有改变任何指针,但它指向的是什么。@WeatherVane:我只是读了文本;没有。“我有一个无符号常量volatile short int*
”-这是一个指针。“我希望它是(x+y)
”-不知道x
和y
是什么,但他明确要求用它们的总和设置指针。