Tag: 优先级

取消引用和后缀的优先顺序

当我通过K&R阅读TCPL时,我无法理解两个表达式: *p++ = val; /*push val onto stack */ 这是我的想法: dereference和postfix具有相同的优先级,并且关联性是从右到左,所以 *p++ = val可能与*(p++) = val ,因为指针通常是顶部的下一个位置,所以在这段代码中,p因为括号而首先增加1,所以p是上面的两个单位当前顶部,但不是当前顶部之上的一个单位,其中val应该是!!! 谢谢

谁定义了C运算符优先级和关联性?

介绍 在C / C ++的每本教科书中,您都可以找到运算符优先级和关联表,如下所示: http://en.cppreference.com/w/cpp/language/operator_precedence StackOverflow上的一个问题是这样的问题: 以下函数的执行顺序如下: f1() * f2() + f3(); f1() + f2() * f3(); 参考上面的图表,我自信地回答说函数具有从左到右的关联性,因此在前面的语句中,在这两种情况下都会像这样评估: f1() – > f2() – > f3() 评估函数后,您完成评估,如下所示: (a1 * a2)+ a3 a1 +(a2 * a3) 令我惊讶的是,很多人告诉我,我错了。 决心certificate他们错了,我决定转向ANSI C11标准。 我再一次惊讶地发现在运算符优先级和关联性方面提到的很少。 问题 如果我认为函数总是从左到右进行评估是错误的,那么表中涉及函数优先级和关联性的真正含义是什么? 谁定义了运算符优先级和关联性,如果它不是ANSI? 如果是ANSI的定义,为什么很少提到运算符优先级和关联性? 运算符优先级和关联性是从ANSI C标准推断还是在数学中定义?