[英]Declaring variables in functions that are called more than once in int main() (in C)
[英]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 };
在这种情况下,所有变量都将初始化为零。 您可以访问它们,例如sa
或sb
等。
这是一个演示程序。
#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.