不能同时初始化 4 个以上的变量吗?

Is it not possible to initalize more than 4 variables at once?

void main() {
    int a, b, c, d, e = 0;

    printf("\n%d", a);
    printf("\n%d", b);
    printf("\n%d", c);
    printf("\n%d", d);
    printf("\n%d", e);
}

输出:

16
0
10818512
0
0

由于某些原因,a 始终等于 16,尽管我将其初始化为 0。

另一方面,当我重新运行代码时,

c 总是会更改其值。为什么会这样?

我觉得我在这里错过了一些重要的东西。

a is always equal to 16 although I initialize it to 0

不,你没有。

这一行

int a, b, c, d, e = 0;

仅将 e 初始化为 0

所有其他变量保持未初始化状态。打印可能会调用未定义的行为。打印的值只是一些东西,垃圾,未定义。

要同时初始化 a,请执行

int a = 0, b, c, d, e = 0;

Is it not possible to initalize more than 4 variables at once?

一次(显式)初始化多个一个个变量是不可能的。

除了 e 之外的所有变量都未初始化。您需要使用赋值运算符 =:

显式初始化它们
int a = 0, b = 0, c = 0, d = 0, e = 0;
...

除了涉及 e 的 printf() 语句外,您的 printf() 语句会调用未定义的行为。

你不应该依赖未定义的行为。它可能看起来好像工作正常,但也可能不正常。

只有e初始化为零。所有其他变量都没有初始化。 有关解释,请参阅 Initialization

Initialization
For each declarator, the initializer, if not omitted, may be one of the following:

...

Implicit initialization
If an initializer is not provided:

  • objects with automatic storage duration are initialized to indeterminate values (which may be trap representations)

所以,如果你想初始化每个变量,你必须为每个变量提供一个初始化器,例如

int a = 0, b = 0, c = 0, d = 0, e = 0;

此声明中的所有变量

int a, b, c, d, e = 0;

除最后一个变量e外没有被初始化。如果它们具有静态存储持续时间,它们将被零初始化。但是这些变量是具有自动存储持续时间的局部变量,不会被编译器隐式初始化。

你需要像

一样初始化每个变量
int a = 0, b = 0, c = 0, d = 0, e = 0;

如果您想一次将所有变量初始化为零,另一种方法是将变量包含在结构中,例如

struct { int a, b, c, d, e; } s = { 0 };

在这种情况下,所有变量都将初始化为零。您可以访问它们,例如 s.as.b 等等。

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    struct { int a, b, c, d, e; } s = { 0 };

    printf( "s.a = %d\n", s.a );
    printf( "s.b = %d\n", s.b );
    printf( "s.c = %d\n", s.c );
    printf( "s.d = %d\n", s.d );
    printf( "s.e = %d\n", s.e );

    return 0;
}

它的输出是

s.a = 0
s.b = 0
s.c = 0
s.d = 0
s.e = 0