Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 一次初始化4个以上的变量是不可能的吗?_C_Initialization_Declaration - Fatal编程技术网

C 一次初始化4个以上的变量是不可能的吗?

C 一次初始化4个以上的变量是不可能的吗?,c,initialization,declaration,C,Initialization,Declaration,输出: 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); } 由于某种原因,a始终等于16,尽管我将其初始化为0 另一方面,c在我重新运行代码时总是更改其值。为什么会发生这种情况 我觉得我错过了一些重要的事情 a始终等于16,尽管我将

输出:

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);
}
由于某种原因,
a
始终等于16,尽管我将其初始化为0

另一方面,
c
在我重新运行代码时总是更改其值。为什么会发生这种情况

我觉得我错过了一些重要的事情

a始终等于16,尽管我将其初始化为0

不,你没有

这条线

16
0
10818512
0
0
仅将
e
初始化为
0

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

要同时初始化
a
,请执行以下操作

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

一次初始化4个以上的变量是不可能的吗


一次(明确地)初始化一个以上的变量是不可能的。

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

int a = 0, b, c, d, e = 0;
printf()语句(涉及
e
的语句除外)调用未定义的行为


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

只有
e
被初始化为零。没有初始化所有其他变量。 请参阅以获取解释

初始化
对于每个声明符,初始值设定项(如果未省略)可以是以下内容之一:

隐式初始化
如果未提供初始值设定项:

  • 具有自动存储持续时间的对象初始化为不确定值(可能是陷阱表示)
因此,如果要初始化每个变量,必须为每个变量提供一个初始值设定项,例如

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

此声明中的所有变量

int a = 0, b = 0, c = 0, d = 0, e = 0;
除最后一个变量
e
外,未初始化。如果它们具有静态存储持续时间,则初始化为零。但是,这些变量是具有自动存储持续时间的局部变量,并且不是由编译器隐式初始化的

您需要初始化每个变量,如

int a, b, c, d, e = 0;
如果希望一次将所有变量初始化为零,另一种方法是将变量封装在类似

int a = 0, b = 0, c = 0, d = 0, e = 0;
在这种情况下,所有变量都将初始化为零。您可以访问它们,例如
s.a
s.b
等等

这是一个演示程序

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

嗯,那么逗号是怎么工作的呢?为什么b、c和d被初始化为0?@NicolasPeyer:“为什么b、c和d被初始化为0?”它们不是。他们的价值观有些不确定。当你自己写的时候:“另一方面,当我重新运行代码时,c总是改变它的值”有没有一种方法可以将多个变量同时初始化为相同的值?“有没有一种方法可以将多个变量同时初始化为相同的值?”没有,没有。“可能”在标准下是相当温和的。无关:首选
printf(“%d\n”,value)格式字符串末尾有换行符。为什么选择向下投票?这是一个正式完整的问题。@alk(不是我的投票)“这个问题没有显示任何研究成果”。关于初始化的任何参考资料都将涵盖这一点。猜测语言语义在CY中并没有太大作用,你最好将代码拆分为
inta,b,c,d,e=0编码到每个变量的一行中。把它们放在一条线上,你什么也得不到。教科书之所以能做到这一点,是因为在书的长度上,这种格式可以节省几页,而在几十万本教科书中,节省几页可以让出版公司的首席执行官为他的游泳池买单。“代码简洁”不过是一句货物崇拜的格言。重要的是可读性和可维护性。每行一个变量的代码更容易阅读和维护,因为您可以很容易地找到并更改它们。
#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