【问题标题】:what is the default value of int datatype in c? [duplicate]c语言中int数据类型的默认值是多少? [复制]
【发布时间】:2020-11-24 21:46:21
【问题描述】:
#include <stdio.h>

void main(int x)
{

    printf("%d",x);
    
    return 0;
}

如果我们在 main() 函数中打印 x 值,它将显示 0 并且 int 的默认值为 0。 当我在 main() 中添加 int x 作为参数时,它打印 x 值为 1。 为什么?

【问题讨论】:

  • 这能回答你的问题吗? What does int argc, char *argv[] mean?
  • 我以前从未见过像这样的main,但我认为它会给出 1,因为 main 的第一个 arg 可以是 argc
  • main 接收两个参数,argcargv,看这里它们的含义:stackoverflow.com/questions/3024197/…
  • "因为 int 的默认值为 0" 你为什么这么认为?没有默认值”。访问未初始化的变量是未定义的行为。
  • @WilliamPursell 除非它是静态的

标签: c types


【解决方案1】:

Afaik 在托管环境中唯一有效的主要原型是:

void main(void);
void main(int argc, char* argv[]);

任何其他(包括您的示例)都是未定义的行为。

在局部范围内,变量被统一化。从中读取会导致未定义的行为。

在全局范围内,int 变量默认初始化为 0

【讨论】:

    【解决方案2】:

    因为int的默认值为0

    不,不是。但是,它是所有静态变量(如全局变量)的默认值,但与它们的类型无关。具有自动存储的变量具有不确定的值,并且在初始化之前读取它们会导致未定义的行为。

    当我在 main() 中添加 int x 作为参数时,它打印 x 值为 1。为什么?

    好吧,int main(int) 不是一个有效的签名。允许的两个是int main(void)int main(int, char**)。当您选择第二个时,第一个参数将是传递给程序的参数数量。第一个参数是程序的名称。所以这段代码:

    int main(int argc, char **argv) {
        puts(argv[0]);
    }
    

    会打印类似的东西

    $ ./a.out
    a.out
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2012-05-23
      • 2011-05-08
      相关资源
      最近更新 更多