定义整数(int);什么是默认值?

int i;
int data[5] = {0};
data[0] = i;
数据[0]的价值是多少? 另外,这条线的含义是什么?
if (!data[0]) { ... }
    
已邀请:
在大多数情况下,
int
对象没有“默认”值。 如果在函数内部声明
int i;
为(非静态)局部变量,则它具有不确定的值。它是未初始化的,在您为其写入有效值之前不能使用它。 在声明任何对象时,明确初始化任何对象都是一个好习惯。     
这取决于代码的编写位置。考虑:
int i;
int data[5] = {0};

void func1(void)
{
    data[0] = i;
}

void func2(void)
{
    int i;
    int data[5] = {0};
    data[0] = i;
    ...
}
func1()
中分配给
data[0]
的值是完全确定的;它必须为零(假设没有其他任务干扰全局变量
i
data
的值)。 相比之下,
func2()
中设定的值完全不确定;您无法可靠地说明将分配给
data[0]
的值,因为在该功能中没有可靠的值分配给
i
。它可能是来自某个先​​前函数调用的堆栈上的值,但这取决于编译器和程序,甚至不是“实现定义”;它是纯粹的未定义行为。 你也问“这是什么意思?”
if (!data[0]) { ... }
'
!
'运算符对其应用的值进行逻辑反演:它将零映射到一,并将任何非零值映射到零。如果表达式求值为非零值,则整体条件的计算结果为true。因此,如果
data[0]
为0,则
!data[0]
映射为1,并执行块中的代码;如果
data[0]
不为0,则
!data[0]
映射为0,并且不执行块中的代码。 这是一种常用的习语,因为它比其他选择更简洁:
if (data[0] == 0) { ... }
    
如果未初始化整数,则其值根据C未定义     
由于你已经包含了
={0};
,整个数组都填充了零。如果这是在任何函数之外定义的,即使没有初始化程序,它也会用零初始化。
if (!data[x])
相当于
if (data[x] == 0)
。     
如果一个整数被全局声明,那么它将自动初始化为零 但如果它是本地的,则包含垃圾值,直到除非给出一些值     
//文件'a.c'
   #include <stdio.h> 

   void main()
    {
            int i, j , k;
            printf("i = %i j = %i k = %in", i, j, k);
    }
// 检测结果
> $ gcc a.c 
> $ ./a.out 
> i = 32767 j = 0 k = 0
    

要回复问题请先登录注册