gpt4 book ai didi

c - 在传递语句参数之前初始化变量如何影响输出?

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:23 25 4
gpt4 key购买 nike

#include <stdio.h>

int main()
{
int a, b, sum;
sum = a + b; // initializing variable "sum" here gives incorrect answer to a+b
printf("Enter value a: ");
scanf("%d", &a);
printf("Enter value b: ");
scanf("%d", &b);

printf("sum of %d + %d = %d\n\n", a, b, c);
return 0;
}

这是一个应该对两个整数求和的程序。我注意到当我在打印和扫描语句中传递任何参数之前初始化变量“sum”时,我的输出不是变量“a”和“b”的正确总和。但是当我在打印和扫描语句之后初始化变量“sum”时,输出是正确的:

#include <stdio.h>

int main()
{
int a, b, sum;
printf("Enter value a: ");
scanf("%d", &a);
printf("Enter value b: ");
scanf("%d", &b);
sum = a + b; // variable "sum" is initialized after statement arguments
printf("sum of %d + %d = %d\n\n", a, b, c);
return 0;
}

所以我的问题是:

  1. 为什么变量需要在语句参数之后初始化?
  2. 变量声明和初始化顺序背后的实际逻辑是什么?

最佳答案

首先,从未声明过变量“c”,编译器给出了错误。修改您的代码。

至于“sum”变量:问题不在于初始化,而在于求值。在 C 中,表达式计算的顺序 被称为“应用”顺序,意味着所有内部表达式都必须在外部表达式之前计算。

在您的情况下,order 是:我们需要为“sum”分配一个值,因此必须对其进行评估!调用加法运算符 ('+')。但是还有两个变量“a”和“b”。但是,它们没有存储任何值。它们还没有初始化呢!从未初始化的变量中获取数据的意图的结果是未知的(称为未定义的行为)。

如果您在调用赋值表达式之前读取数据到“a”和“b”变量,a 中的评估结果顺序相同正确答案,因为“a”和“b”存储了一些定义的数字。

所以...当用 C 编写时,您应该始终牢记求值顺序是适用的。如果您开始玩副作用,这一点非常重要。此外,函数参数的评估顺序未定义。

关于c - 在传递语句参数之前初始化变量如何影响输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42104297/

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