首页 > 解决方案 > 箭头运算符和后增量的优先级?

问题描述

C新手。所以我看到了这行代码

system->word[system->index++] = system->next_char;

是否等同于:

system->word[system->index] = system->next_char;
index++;

职位增量的优先级是什么?在线上的所有操作都执行完成后,它是否只将索引的值增加 1?

标签: coperator-precedence

解决方案


更新system->index被定义为未按顺序(未指定在语句中的其他操作之前或之后)的副作用。更新可能发生在其他操作之前、期间或之后。

只要它没有在语句的其他地方使用,它没有排序的事实就无关紧要,因为如果它没有在其他地方使用,那么语句所做的任何事情都不会受到更新发生时的影响。(请注意,即使system->index在使用值之前对内存进行了更新,编译器也会响应以确保使用更新前的值。)

如果被更新的对象在语句的其他地方以无序的方式使用(也就是说,没有规则指定先使用,更新或其他使用),那么程序的行为将不会由 C 标准定义。

这不是优先级的结果。优先级决定了如何解释表达式的结构,而不是它们操作的顺序。


推荐阅读