C语言中为什么常量和表达式不能进行自增自减运算?

2024-10-31 20:12:24
有5个网友回答
网友(1):

首先说表达式,我们要知道自增和自减的原理,从表象上看自增自减对一个变量的值进行+1或-1操作。但是深入到底层的实现原理,这两个操作其实是对固定的内存地址内的值进行+1或-1。所以要能够自增自减首先就要满足有固定的内存地址,而对于表达式来说,最终表达式计算得到的结果如果不赋值给变量的话是没有固定内存地址记录这个值的。

再来说常量,虽然常量是有分配固定内存地址,但是常量的意义就是指‘不变化的量’,所以说这是类型限定了常量是不能被改变的,如果能变,那就不是常量了。

网友(2):

(1)常量不能进行自加自减运算。如4++,与其等价的表示形式为4 =4+1,不符合赋值表达式的要求。特别注意的是在C语言中数组名和函数名都是常量,故不能进行自加自减运算 。
(2)表达式不能进行自加自减运算。如(x+y)++,与其等价的表示形式为x+y=x+y+1,不符合赋值表达式的要求。

网友(3):

常量即是不可改变的量,而自增自减是会修改常量值的,所以凡是修改常量值的语句都违背了常量本身的定义,因而不能自增自减常量。
补充:常量表达式将在编译时而不是运行时计算,并且可在可使用常量的任何位置使用。 常量表达式的计算结果必须是位于该类型的可表示值范围内的常量。 常量表达式的操作数可以是整数常量、字符常量、浮点常量、枚举常量、类型强制转换、sizeof 表达式和其他常量表达式。

网友(4):

  1. 常量就是被  const 修饰的变量,因为被 const 修饰了,所以肯定不能进行自增自减操作,如果在代码中修改,编译器会检查不通过。

  2. 自增自减的本质是:

  • 将数据从内存读取到寄存器

  • 在寄存器中完成加1或减1操作

  • 将数据从寄存器写回内存

表达式本身就会得出一个结果,这个结果没有被存储到内存中,所以上面的第1步就无法完成,下面的步骤当然也无法执行了。

网友(5):

这是c语言设计之初就规定的,常量不能自动递增,如果能自动递增就不叫常量了,就叫变量了。表达式就更不用说了~~