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

Python011

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

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

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

这个情况比较多,不过一般说以下两种情况下的常量是有地址的:

1、如果是以const关键字修饰变量而产生的“不可变变量”的话,是有地址的,如const

int

a

=

0。

但是严格来说const修饰只是产生了不可变变量,并不是严格意义上的常量。

2、字符串常量,例如

char

*a

=

"abc"那么字符串“abc”就是一个字面值字符串,这是一个常量,其地址就是这个字符串第一个字符所在的地址。

再有像是字面值数字

"int

a

=

5"里边的5,是没有地址的。

表达式本身作为代码,并不拥有地址。但是用来组成表达式的变量或常量是可以拥有地址的。

获取一个常量或变量的地址可以用“&”取址符,例如:

const

int

b

=

0

const

int

*

pb

=

&b

那么pb里边就是b的地址了。