gpt4 book ai didi

c - 使用数组时后缀/前缀如何工作

转载 作者:行者123 更新时间:2023-12-03 23:20:24 24 4
gpt4 key购买 nike

以下是2个代码示例:

int k,j=1;
int x[4]={5,14,25,47};
k = x[j] + ++j;
printf("%d, %d",j,k);
显示警告 - “'j' 上的操作可能未定义”
但输出是:2, 16
然后我尝试了这个:
int k,j=1;
int x[4]={5,14,25,47};
k = x[j] +++j;
printf("%d, %d",j,k);
这不会发出任何警告,但输出有点令人困惑。输出- 1,15
为什么 j 在第二种情况下没有增加?

最佳答案

k = x[j] +++j;
是相同的
k = (x[j]++) +j;
另外, k = x[j] + ++j是未定义的行为,因为加法的求值顺序未定义。除了允许编译器产生任何东西这一事实之外,这两个片段都是对该行的同样合理的解释:
j++;
k = x[j] + j;
j++;
k = x[j-1] + j;
一般来说,避免“聪明”。如果您不是 100% 确定自己在做什么,请不要使用 ++--在更复杂的陈述中。在单独的行之前或之后进行递增或递减。这将为您省去很多麻烦。例如,你能不能毫无疑问地在不使用谷歌搜索的情况下准确说出什么
while(*str++) { 
/* Do something */
}
方法?恕我直言,它更清楚
while(*str) { 
str++;
/* Do something */
}
当然,它需要一条线,减少线的数量可能是一件好事,但在这种情况下,我认为最好谨慎行事。在这种特殊情况下,您还可以用括号更清楚地说明: *(str++)如果你愿意,但我想你明白我的意思。
我实际上做了一个答案,这是实际问题: https://stackoverflow.com/a/56522806/6699433

关于c - 使用数组时后缀/前缀如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63325057/

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