gpt4 book ai didi

c - 如何在加法问题中使用后/前增量运算符?

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

 main(){

int x = 256, y = 4;
printf("%d\n\n", x++ + ++y); //output = 261
printf("%d\n\n", x); // output = 257
printf("%d", y); // output = 5

}

最终答案是 261,因为 256 -> 257(后运算符)和 5 -> 5(前运算符)导致 256 + 5 = 261?

最佳答案

给定:

int x = 256, y = 4;
printf("%d\n\n", x++ + ++y);

简而言之: x++返回值 256然后递增 x到 257。++y增量y到 5 并返回值 5 。因此,加法将 256 和 5 相加,得到 261 .

长篇大论:x++计算结果为 x 的当前值这是 256并计划增量 x到 257。同样 ++y安排 y 的增量到 5 并计算出增加的值 5 。因此,加法将 256 和 5 相加,得到 261 。涉及x的条款的顺序和y求值未定义,但两者都必须在加法之前求值(尽管求值加法时增量可能不完整)。因为在对参数(以及表示函数的表达式)求值但在调用函数之前存在一个“序列点”,所以增量必须在 printf() 时完成。被调用。

接下来的两条语句打印 xy2575 .

请注意这两个 printf()操作可以合二为一。两者都不能与第一个组合而不调用未定义的行为。 (有关此主题的更多信息,请参阅 Multiple increments and undefined behaviour。)

所以,考虑到我不会像你写的那样表达它,你似乎有正确的解释。

此外,标准 C 要求所有函数返回类型已经超过 15 年了(自 C99 标准化以来)。你应该写:

int main(void)

对于 main()不带参数的函数。 (有关完整详细信息,请参阅 What should main() return in C and C++?。)

请注意,此问题仅调用完全定义的行为(至少在 printf() 语句中)。它并不是询问序列点之间单个变量的多个增量。

关于c - 如何在加法问题中使用后/前增量运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32281026/

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