我可能是一个基本的东西或任何我无法弄清楚会发生什么的东西
例如
如果我写
char temp[3]="";
或
char temp[3]={0};
或
char temp[3]={};
或
char temp;
在所有四种情况下,初始化是什么。
如果存储0则是否存储为ascii值?
如果为NULL,那么也是存储的ascii值。
如果某些元素未被声明,那么它们具有哪个值
垃圾值或指定的东西
答案 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。