C语言赋值运算符结合性与表达式求值

在 C 语言中,赋值运算符具有“自右向左”的结合性。这意味着在表达式中,最右边的赋值操作会首先执行,然后结果会传递给左侧的赋值操作,以此类推。

例如,表达式 a = b = c = 5 等价于 a = (b = (c = 5))。首先,c 被赋值为 5,然后 b 被赋值为 c 的值(即 5),最后 a 被赋值为 b 的值(也是 5)。

另一个例子是表达式 a = 5 + (c = 6)。首先,c 被赋值为 6,然后表达式 5 + 6 被计算,结果为 11,最后将 11 赋值给 a

需要注意的是,赋值运算符的这种结合性可能会导致一些难以理解的表达式。例如,表达式 a += a-- 的值取决于 a-- 的计算时机。如果 a-- 在加法操作之前计算,则表达式的值为 a + (a - 1);如果 a-- 在加法操作之后计算,则表达式的值为 (a + a) - 1。为了避免这种歧义,建议使用括号明确指定运算顺序。

ppt 文件大小:2.2MB