在数组中存储值并进行初始化?

时间:2016-11-01 17:02:24

标签: c

我可能是一个基本的东西或任何我无法弄清楚会发生什么的东西

例如

如果我写

char temp[3]="";

 char temp[3]={0};

 char temp[3]={};

char temp;

在所有四种情况下,初始化是什么。

如果存储0则是否存储为ascii值?

如果为NULL,那么也是存储的ascii值。

如果某些元素未被声明,那么它们具有哪个值

垃圾值或指定的东西

3 个答案:

答案 0 :(得分:2)

前三个是等效的,数组将初始化为零。

最后一种情况有所不同,因为您不会初始化单个字符。它的初始化方式取决于您定义变量的 where 。如果它是一个全局变量,它将被零初始化。如果它是一个局部变量,则它根本不会被初始化并且具有不确定的值。

零为零,即0而不是'0'

最后,NULL用于指针,而不用于非指针值。由于字符串终止符'\0'(等于0)也称为空字符,因此存在一些混淆。空字符和空指针在语义上是两个不同的东西,即使它们可以具有相同的实际值。

答案 1 :(得分:2)

char temp[3]={};

不正确C.

char temp[3]={0};

将temp [0]初始化为0,其余部分初始化,就好像它们是默认初始化的全局变量一样,对于chars意味着其余的也是0。

char temp[3]="";

是从(空)字符串初始化,其行为与将字符串分解为字符文字并分配它们的行为相同。 对于空字符串,细分版本为{ '\0' },与{0}相同,这使其等同于上面的情况。

char temp;将默认初始化(对于chars == zeroed),如果它是一个没有非限定性定义的全局,或者如果它是一个自动变量,它将具有未定义的内容。

答案 2 :(得分:2)

1)

char temp[3]="";

 char temp[3]={0};

是等价的。数组temp将填充3个零。它好像你有:char temp[3] = {0, 0, 0};

2)

 char temp[3]={};

在C中是非法的。在C中不允许使用空的初始化器。

3)

char temp;

这取决于声明temp的位置。

如果它在块范围内,则temp将被取消初始化,其值为不确定
如果它在文件范围内,那么temp将被初始化为0,前提是它没有其他定义 1 。就像你有char temp = 0;

一样

1 这可能听起来很奇怪。但是C有一个名为"暂定的概念"。请参阅:About Tentative definition