后缀,中缀和前缀表示法的说明

时间:2010-09-10 17:14:10

标签: c

有人会非常友好地解释关于C编程语言的中缀,后缀和前缀表示法吗?

3 个答案:

答案 0 :(得分:5)

以下是three terms, and how they apply的详细讨论。

C语言几乎到处都使用中缀符号。例如,您可以:

x = 4 + 2;

但是,有一些操作使用前缀表示法,例如否定:

x = -y;  // "-" is using prefix notation

Postfix用于增量(++)等操作:

x = y++;

答案 1 :(得分:5)

每个例子:

缀:

a + b
a * b

后缀:

a++
f()
a[i]

前缀(在C和C ++中也称为“一元”):

++a
&a
-a

答案 2 :(得分:1)

关于中缀与前缀与后缀的C语言定义并不是那么明确;术语“前缀”和“中缀”甚至不出现在语言定义中。相反,您有二元运算符表达式(sort-of infix)和一元表达式(sort-of prefix)。此外,将表达式分组为后缀,一元和二元类别更多地与哪些表达式应该具有比其他表达式更高的优先级,而不是运算符出现在表达式中的位置。

例如,&&||运算符看起来应该与二元运算符表达式分组,但它们不是;他们在语言语法中占据了自己的空间,他们有自己独特的语义。组件选择运算符.->与后缀运算符组合在一起,即使它们出现在两个表达式之间,因为组件选择应始终具有比地址间接更高的优先级(即{{1}应始终将其解析为&a.b,而不是&(a.b)),并且因为右侧操作数必须始终是一个标识符。

后缀表达式包括以下内容:

  1. 主要表达式(变量名,文字,带括号的表达式)
  2. 数组下标表达式((&a).b
  3. 组件选择(a[i]a->b
  4. 函数调用(d.c
  5. 发布递增和递减表达式(foo(a,b)a++
  6. Compount literals(仅限C99 - b--
  7. 所有后缀表达式的优先级都高于一元或二元表达式。

    一元表达式包括以下内容:

    1. 后缀表达式
    2. 投射表达式((int []) {1, 2, 3}
    3. 表达式的大小((int) foosizeof foo
    4. 一元减(sizeof (int)
    5. 一元加(-5
    6. 逻辑否定(+1
    7. 按位否定(!expr
    8. 地址表达式(~byte
    9. 间接表达式(&foo
    10. 预增量和减量(*ptr++foo
    11. 一元表达式的优先级高于二进制表达式,但优先级低于后缀表达式。

      二进制表达式包括以下内容:

      1. 乘法用法(--bara * b
      2. 添加表达式(c / da + b
      3. 转换表达式(c - da << b
      4. 关系表达式(val >> 2a < b
      5. 平等表达式(c >= da == b
      6. 按位表达式(c != da & bc | d
      7. 二进制表达式的优先级低于后缀和一元表达式。

        除了这些分组,你还有逻辑运算符表达式(e ^ f&&),条件表达式(||),它们的优先级低于二进制表达式,赋值表达式(a ? b : ca = b),顺序表达式(c += d)和常量表达式(a, b, cint a[42]),它们与分类的文字不同后缀表达式。