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

时间:2010-12-26 05:28:20

标签: c int

int i;
int data[5] = {0};
data[0] = i;

data [0]中的值是什么?

此外,这条线的含义是什么?

if (!data[0]) { ... }

6 个答案:

答案 0 :(得分:20)

在大多数情况下,int对象没有“默认”值。

如果在函数内部声明int i;为(非静态)局部变量,则它具有不确定的值。它是未初始化的,在您为其写入有效值之前不能使用它。

在声明任何对象时,明确初始化任何对象都是一个好习惯。

答案 1 :(得分:8)

这取决于代码的编写位置。考虑:

int i;
int data[5] = {0};

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

void func2(void)
{
    int i;
    int data[5] = {0};
    data[0] = i;
    ...
}

data[0]中分配给func1()的值是完全确定的;它必须为零(假设没有其他任务干扰全局变量的值idata)。

相比之下,func2()中设定的值完全不确定;您无法可靠地说明将为data[0]分配的值,因为在函数中没有可靠的值分配给i。它可能是来自某个先​​前函数调用的堆栈上的值,但这取决于编译器和程序,甚至不是“实现定义”;这是纯粹的未定义行为。

你也问“这是什么意思?”

if (!data[0]) { ... }

'!'运算符对其应用的值进行逻辑反演:它将零映射为1,并将任何非零值映射为零。如果表达式求值为非零值,则整体条件的计算结果为true。因此,如果data[0]为0,则!data[0]映射为1,并执行块中的代码;如果data[0]不为0,则!data[0]映射为0,并且不执行块中的代码。

这是一种常用的习语,因为它比另类更简洁:

if (data[0] == 0) { ... }

答案 2 :(得分:4)

如果未初始化整数,则其值根据C

未定义

答案 3 :(得分:3)

由于您已包含={0};,因此整个数组都填充了零。如果这是在任何函数之外定义的,即使没有初始化程序,它也会用零初始化。 if (!data[x])相当于if (data[x] == 0)

答案 4 :(得分:3)

如果全局声明一个整数,那么它将自动初始化为零 但如果它是本地的,则包含垃圾值,直到并且除非给出一些值

答案 5 :(得分:1)

//文件'a.c'

   #include <stdio.h> 

   void main()
    {
            int i, j , k;
            printf("i = %i j = %i k = %i\n", i, j, k);
    }

//测试结果

> $ gcc a.c 
> $ ./a.out 
> i = 32767 j = 0 k = 0