相关疑难解决方法(0)

(为什么)使用未初始化的变量未定义行为?

如果我有:

unsigned int x;
x -= x;
Run Code Online (Sandbox Code Playgroud)

很明显,x 应该这样表达后是零,但到处看,他们说的行为,这种代码是不确定的,而不是仅仅值x(直到减法之前).

两个问题:

  • 这段代码的行为确实未定义吗?
    (例如,代码在兼容系统上崩溃[或更糟]?)

  • 如果是这样,为什么 C表示行为是未定义的,当非常清楚x这里应该为零时?

    即不在此定义行为给出的优势是什么?

很明显,编译器可以简单地使用它在变量中认为"方便"的任何垃圾值,并且它可以按预期工作......这种方法有什么问题?

c initialization undefined-behavior

77
推荐指数
6
解决办法
1万
查看次数

在c中创建的数组不是空的?

我刚刚创建了一个大小为10的数组

int array[10];
Run Code Online (Sandbox Code Playgroud)

之后我想检查数值

for(int i = 0; i < 10; i++){
printf("%d\n", array[i]);
}
Run Code Online (Sandbox Code Playgroud)

但产量与我的预期不同.我虽然所有值都应为0,但输出结果如下:

1996260900
1
0
1995115336
78836
78796
0
68600
0
0
Run Code Online (Sandbox Code Playgroud)

这是为什么?
提前致谢!

c

-2
推荐指数
2
解决办法
254
查看次数

标签 统计

c ×2

initialization ×1

undefined-behavior ×1