运算符结合方向问题
对于诸如1+2*3+4、*++pointer之类的表达式,有关运算符结合方向问题(左结合先还是右结合先)我总是会搞混淆。现把自己对上述这两个表达式的有关运算符结合方向问题的理解(很可能是不对的)写出来,请各位网友指点,不胜感激!
我的理解:
对于运算符结合方向问题考虑的步骤为。
(1)、先看相邻两个运算符的优先级。
(2)、确定运算符的优先级后,再确定一个操作数。用于进行运算。
下面举例说明:
对于1+2*3+4,相邻两个运算符是+和*,*的运算符的优先级高。再确定一个操作数,现为2。回过头来,由于*是左结合性,所以是这样结合——2*。当得出值后。1+2*3+4这个表达式变为1+6+4。重复上述步骤。+和+是同级运算符,先第一个+,由于+是左结合性,所以操作数先是1,也就是说,第一个+先与1结合。运算后表达式1+6+4变为7+4……
上述这个问题的描述,我还能写出一些,对于下面这个例子,我不大能描述出来,请网友原谅。
对于*++pointer,我知道它等同于*(++pointer).我的描述是:
由于*和++是同优先级,所以是*先开始运算(这是不是错了?),确定操作数时,操作数应确定为右边的整个东西——++pointer(我理解*是左结合性,*应该与右边的整体——++pointer进行结合。这是不是又错了?)。经过上述两个步骤——— (1)、先看相邻两个运算符的优先级。(2)、确定运算符的优先级后,再确定一个操作数。用于进行运算。————后,我就认为,对于*++pointer,它等同于*(++pointer).
我是电脑菜鸟,刚接触C不久,也没有人指点,只是凭自己的理解来学C,也不懂自己理解的对不对。请各位网友不吝教!