繁体   English   中英

箭头运算符和后增量的优先级?

[英]Precedence of the arrow operator and post increment?

C 的新功能。 所以我看到了这行代码

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

是否等同于:

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

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

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

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

如果正在更新的 object 在语句的其他地方以无顺序的方式使用(即,没有规则指定先更新还是其他使用),则程序的行为将不会由 C 标准定义。

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

不是。

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

相当于:

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

因为indexsystem指向的struct上的一个字段。 如果您还有一个名为index的标量变量,则您没有错误,但应该增加错误的变量。

作为一般规则,所有一元运算符首先在变量的右侧进行计算,然后是左侧的运算符(右侧运算符的优先级高于左侧运算符)并从最接近操作数到最远进行计算。 所以最靠近操作数的运算符首先计算,然后是右边的下一个......所以直到右边没有更多的右运算符,然后是左边最近的运算符,依此类推,直到没有更多的左运算符在左边。

那么如果我们有-x++会发生什么? ++首先被评估为x的值,并且计划发生变量的后递增,然后评估左侧的值,作为结果给出x递增之前的值,改变符号,以及变量x使其值递增(仅递增,无符号更改)。

另一个例子:让我们计算++x->field :首先->field (整个东西, ->箭头和字段名称)被认为是右一元运算符,给定一个指针获取名为field fo 的字段中的值x指向的结构。 该值递增(并再次存储在x->field )并且返回的值是最终递增的值。

最后一个例子:让我们计算*p++ p的值计划后递增,但保留其先前的值。 然后p的旧值被用来访问它所指向的值,给原来指向的值。 最后p递增并指向访问值旁边的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM