深圳松岗 网站建设,兰州网站关键字优化,比格设计官网,深圳建设工程招标网C语言中的自增自减运算符#xff08;i、i--、i、--i#xff09;对于新手来说#xff0c;通常感到困惑#xff0c;说来容易算来难#xff0c;如果涉及到混合运算#xff0c;更是无法理解。甚至有些学了几年的老手#xff0c;未必全掌握#xff08;也许你忽略了这个问题i、i--、i、--i对于新手来说通常感到困惑说来容易算来难如果涉及到混合运算更是无法理解。甚至有些学了几年的老手未必全掌握也许你忽略了这个问题笔者相信你的能力。本文以自增运算符为例自减运算符机理相同为读者解惑。一、先谈谈你可能已经掌握的1、自增运算符不适用于常量或表达式。如果你试图写出诸如2、56、ij等语句在编译时均会出现错误提示无法通过编译。2、自增运算符仅适用于变量如i、i等是没有问题的。对于其运算机理相信对于很多老手都很清楚了。对于新手而言值得一提它们最终结果均是实现ii1这种计算但计算顺序是有不同的。记住一点i是先取i的值之后再自加而i则是先让i自加再取其值。二、再谈谈你可能困惑的如果i、i参与混合运算你真的清楚吗请看下面的例子你能回答j、k、l、m、n、t的输出值是多少吗1、例子#include stdio.hint main(){ int i 3,j0,k0,m0,n0,t0,l0; j (i)(i)(i); printf(i%d,j%dn,i,j); i3; k (i)(i)(i); printf(i%d,k%dn,i,k); i3; l (i)(i)(i); printf(i%d,l%dn,i,l); i3; m (i)(i)(i); printf(i%d,m%dn,i,m); i3; n(i)*(i)*(i); printf(i%d,n%dn,i,n); i3; t(i)*(i)*(i); printf(i%d,t%dn,i,t); return 0;}有些读者可能会说这还不简单那就按照上面你讲的i是先取i的值之后再自加而i则是先让i自加再取其值这样按照优先级逐步计算就是了于是就得出以下答案j12k15l14m12n60t100。如果你这样想又错了。以VC6.0开发环境为例不同开发环境由于编译原理不同可能会有差异读者一定要注意其运行结果为j9k16l15m13n80t125如下图所示。程序运行结果2、例程分析有些读者可能对此结果非常不解尤其是l和m的操作数只是顺序不同值为何不一样了。下面我们来分析一下运算机理。在VC6.0中表达式按优先级运算前对操作数i先自增1而且长表达式是分步计算的对表达式中还未参与运算的所有操作数i均有影响已经计算的i不受影响一边计算一遍确定操作数i的值整个表达式计算完成后再对i实现自增。如l的计算先计算前两项使得两个i总共自增了两次即i5该步计算相当于5510第二步计算10i这时取i的值为5参与运算得结果15最后i项自增1使i变为6完成计算。再比如m的计算先计算前两项仅有一个i自增1得i4即实现448第二步计算8ii自增1得i5于是得到结果m8513最后i项自增1使i变为6完成计算。其它表达式计算机理相同请读者验证。三、总结学编程语言要细心多编程多看例程会逐步提高。我是“Coc编程”如果你觉得本文有帮助请关注我并点赞。有疑问或其它要探讨的问题请留言感谢