gpt4 book ai didi

c++ - 为什么这个语句没有改变数组?

转载 作者:行者123 更新时间:2023-11-30 18:16:55 25 4
gpt4 key购买 nike

int a[]={1,2,3,5};
int i=1;
a[++i]=a[i];
int j;
for(j=0;j<4;j++)
{
printf("%d",a[j]);
}



output:1235;

为什么输出是1225而不是1335

我在代码块上执行了这个程序。在 a[++i]=a[i] ,从右到左的分配将是他们的,导致 a[2]=a[1] 。如果我错了请纠正我。

最佳答案

因为a[++i]=a[i];是未定义的行为。

序列点是尘埃落定的时间点,并且迄今为止所看到的所有副作用都保证完成。 C标准中列出的序列点有:

at the end of the evaluation of a full expression (a full expression is an expression statement, or any other expression which is not a subexpression within any larger expression); at the ||, &&, ?:, and comma operators; and at a function call (after the evaluation of all the arguments, and just before the actual call).

标准规定

Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.

关于c++ - 为什么这个语句没有改变数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19855366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com