繁体   English   中英

一次不能初始化超过 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

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

另一方面,当我重新运行代码时, c总是改变它的值。 为什么会发生这种情况?

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

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

初始化
对于每个声明符,如果没有省略,初始化程序可能是以下之一:

...

隐式初始化
如果未提供初始化程序:

  • 具有自动存储持续时间的对象被初始化为不确定值(可能是陷阱表示)

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

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

a 总是等于 16 虽然我将它初始化为 0

你不可以。

这条线

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

仅将e初始化为0

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

要初始化a ,请执行

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

一次不能初始化超过 4 个变量吗?

它甚至不是可能(明确)INITIALISE多个变量一次。

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

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

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

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

此声明中的所有变量

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 };

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

这是一个演示程序。

#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM