gpt4 book ai didi

c - C中增量运算符的工作

转载 作者:行者123 更新时间:2023-12-01 16:10:53 24 4
gpt4 key购买 nike

#include <stdio.h>
void main()
{
int x=5,y=6;
printf("%d%d%d",x++,(y=x++),(x=y++));
}

谁能解释一下为什么返回 766?

最佳答案

首先,如果这个问题以这种格式出现在初级 C 编程类(class)中,那么该类(class)/老师很糟糕。

这里的主要问题是 'x' 和 'y' 在序列点之前都被修改了几次,这是未定义的行为 (C99/C11 6.5 §2)。这是一个严重的错误,因为任何事情都可能发生。在删除++ 困惑之前,不知道这段代码做了什么。 Read this then read it again .

此外,函数参数的计算顺序是未指定的行为。 (C99/C11 6.5.2.2 §10)。也就是说,编译器可能会从左到右或从右到左评估它们,而我们无法知道应用哪种顺序。编译器不需要记录这个!但如果你幸运的话,它可以被记录下来。在尝试回答问题之前,您必须阅读编译器文档以查看适用的评估顺序。否则你必须给出两个答案。

此外,如果这是用于托管系统(例如 Windows PC)的代码,则仅允许 main 返回“int”,否则此代码将无法在 C 编译器上编译。

关于c - C中增量运算符的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107803/

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