算子优先与评价顺序
int a=1; // Line 1a = a++ + ++a; // Line 2printf("%d",a); // Line 3Line 2
在计算&(逻辑和)、欧元(逻辑OR)和逗号运算符的左操作数和右操作数之间。例如,在表达式中 *p++ != 0 && *q++ != 0,子表达式的所有副作用 *p++ != 0在尝试访问之前已完成。 q.
在计算三元“问号”运算符的第一个操作数和第二个或第三个操作数之间。例如,在表达式中 a = (*p++) ? (*p++) : 0之后有一个序列点。 *p++,这意味着在执行第二个实例时,它已经增加了。
在一个完整表达式的结尾。此类别包括表达式语句(例如赋值)。 a=b;)、返回语句、if、Switch、while或do-while语句的控制表达式以及for语句中的所有三个表达式。
在函数调用中输入函数之前。未指定计算参数的顺序,但此顺序点意味着在输入函数之前,它们的所有副作用都已完成。在表达中 f(i++) + g(j++) + h(k++),f的原始值的参数调用。 i,但是 i在进入 f..同样, j和 k在输入前更新 g和 h分别。但是,它没有按哪个顺序指定。 f(),g(),h()被执行,也不按哪个顺序执行 i,j,k都是递增的。的价值 j和 k在…的身体里 f因此是没有定义的。 3注意,函数调用 f(a,b,c)的逗号运算符和计算顺序的使用。 a,b,和 c没有具体说明。
在函数返回时,将返回值复制到调用上下文中。(这个序列点仅在C+标准中指定;它仅隐式地存在于C中。)
在初始化器的末尾;例如,在声明中计算5之后 int a = 5;.
在一个完整表达式的结尾。此类别包括表达式语句(例如赋值a=b;)、返回语句、if、Switch、while或do-while语句的控制表达式,以及for语句中的所有三个表达式。
Line 2
int x=10,y=1,z=2; // Line 4int result = x<y<z; // Line 5
Line 5result1.
x<y<zLine 5
x<(y<z)(x<y)<zresult0result1Operator PrecedenceEqual/Same - Associativity(x<y)<z.
C算子的优先级和结合性影响表达式中操作数的分组和求值。只有当其他优先级较高或较低的运算符存在时,运算符的优先级才是有意义的。首先计算具有高优先级运算符的表达式。优先级也可以用“绑定”一词来描述。具有较高优先级的运算符据说具有更紧密的绑定。
它提到“先计算具有较高优先级运算符的表达式”。
()x<y<z(x<y)<z<
此页面按优先级(从最高到最低)列出C运算符。它们的结合性指示在表达式中应用优先级相等的操作符的顺序。
int result=x<y<zx, yzx, y, z10, 12x<y<z10<1<2.
10<11<2
int myval = ( printf("Operator\n"), printf("Precedence\n"), printf("vs\n"),printf("Order of Evaluation\n") );commaleft-to-rightprintf()myval.
撒科打诨
哈士奇WWW