【问题标题】:C uninitialized int has a value of 1 instead of 0 [duplicate]C未初始化的int的值为1而不是0 [重复]
【发布时间】:2017-05-31 22:26:32
【问题描述】:
#include <stdio.h>
#include <string.h>
#include "prac.h"
#define MYNAME "Butter"

int main() {
    int numberOfKids;
    int weight;
    int shirt;

    printf("If I eat a Watermelon I will weigh %d lbs \n", weight + numberOfKids+ shirt );
    return 0;
}

我编译运行程序,结果为1;虽然我预计它是 0。当我单独检查每个变量的值时,weight 变量的值为 1。有人可以解释为什么特定变量的结果不是 0?我是 C 的新手,想尝试基础知识以更深入地了解 C 的细微差别。任何帮助将不胜感激。

【问题讨论】:

  • 因为具有未初始化值的变量具有未定义的行为
  • 换句话说,未初始化变量的值必须是什么没有规则。可以是0,也可以是1,也可以是429496729。简而言之。不要依赖未初始化的变量来获得某个值。
  • @leaf 观点的扩展。在某些范围内,未初始化的变量具有明确定义的默认情况。并非所有未初始化的变量都是 UB。
  • 是的。例如,某些静态变量被初始化为零。 c-faq.com/decl/initval.html
  • @user4581301 我不知道。感谢您的更正。

标签: c


【解决方案1】:

C 中函数内的变量不保证默认设置为任何值。在内存中,最后存储在那里的任何内容(可能不会被刷新/擦除为 0)将是 int 初始化的内容。

Initializing variables in C回答了这个问题

编辑:正如 chux 所说,如果本地 static 变量没有被赋予初始值,它们将被初始化为 0。还覆盖了Is un-initialized integer always default to 0 in c?

【讨论】:

  • 感谢您的快速回复!具有讽刺意味的是,我阅读了您链接的同一线程,但注意到该变量位于函数内部。所以,我想确保解释适用于局部变量。再次感谢您的澄清。
  • Hmmm: static int x 在函数内部 is 初始化为 0。
  • @JeanCabral 我不想太苛刻,因为这个网站有时对新用户不友好。但请认识到,对于新问题,我们不仅期望一定程度的研究工作,而且希望您在您的问题中告诉我们您进行了哪些研究。您在问题中没有提到您已经阅读了该链接中的答案,老实说,鉴于链接答案中的内容,我无法理解您为什么会写下您“期望”将变量初始化为 0。
猜你喜欢
  • 2014-06-17
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 2020-05-30
相关资源
最近更新 更多