这是真的还是错的?解释
i ++ = ++ i
答案 0 :(得分:4)
不,不是。无论是真还是假。
问题是C / C ++没有定义++在这个表达式中发生的时间。
所以你有几种可能性:
i
添加1 ++i
,然后将其存储在i
中,然后添加again for the
i ++`。i
添加1 i++
并保存结果以供日后使用;为i
添加1 ++i
,将其分配给i
,然后将保存的i++
值放入i
。i
添加1到i++
,然后在其上方分配++i
的结果。当你考虑i = ++i++;
(参见评论中的链接。是否存在“序列点”的技术问题,此时应解决所有副作用。在此作业中,没有一个。)
答案 1 :(得分:1)
这取决于你实际得到的是什么:
如果您的意思是以下表达式评估为true:
i++ == ++i
然后它是未定义的行为,因为我在序列点之间被修改了两次。
如果你的意思是:
做i++;
和++i;
做同样的事情然后答案就是那样 - 他们都增加了我。然而,如果它们是较大声明的一部分,它们是否有区别,它们是否在增量之前或之后使用该值。
实际上,这意味着i ++可能涉及在内部制作副本,以便在增量之前存储值,而++我不需要制作这样的副本。
如果你问的是i ++ = ++ i;作为一个声明,它不是一个更基本问题的有效陈述:由于其价值的“临时”性质,i ++不能成为作业的左侧。
答案 2 :(得分:1)
万一你不知道预增量和后增量之间的区别,你刚刚提出了难以理解的问题:
i = 7;
printf("%d\n", i); // precondition: result 7
printf("%d\n", ++i); // PRE-INCREMENT: result 8 !!!
printf("%d\n", i); // postcondition: result 8
i = 7;
printf("%d\n", i); // precondition: result 7
printf("%d\n", i++); // POST-INCREMENT: result 7 !!!
printf("%d\n", i); // postcondition: result 8