如果某事是一个const volatile int,它可以根据变量的状态改变吗?
问题描述:
我有一个unsigned const volatile short int*
。我希望它是(x + y),它在定义时设置为0.但是,如果由于某种原因y变为5,我想要unsigned const volatile short int*
也改变。如果某事是一个const volatile int,它可以根据变量的状态改变吗?
C这可能吗?
(注:我使用的独立C99模式GNU扩展,和我的意思是它可以用一个功能自动和不改变)
答
有没有办法自动进行变量更新基于像其他变量在C中。
而不是将x
和y
的总和存储在一个变量中,您应该考虑制作一个函数,在需要时重新计算总和。加入应该是相当快:
int get_the_sum()
{
return x + y;
}
或者,你可能会考虑x
和y
是只能setter函数来改变静态变量。 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',就去掉'const'。并且不'const'矛盾'volatile'? –
指针不是'const'限定的,所以是的,它当然可以被修改。 – Olaf
@WeatherVane不,const与volatile不矛盾。 [它们在C中是正交的](http://stackoverflow.com/questions/4592762/difference-between-const-const-volatile)。 –