【面试】自增自减运算数据类型

今天做题,遇到一道题,关于++和 -- 的操做对象数据类型。

印象中题目给出的类型有 常量、指针、整型数、浮点型、表达式。比较疑惑浮点型double 和 float。

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

回答一:

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


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

回答二:

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

自增自减的本质是:

  1. 将数据从内存读取到寄存器
  2. 在寄存器中完成加1或减1操作
  3. 将数据从寄存器写回内存

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

经过查阅资料和实验验证:

整型变量、浮点型、指针都可以进行自增(++)自减(--) ; 常量不可以,会出现编译错误。

例证:整形数据和浮点型数据

猜你喜欢

转载自blog.csdn.net/weixin_41939983/article/details/108189853