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

Nai*_*him 12 c int

int i;
int data[5] = {0};
data[0] = i;
Run Code Online (Sandbox Code Playgroud)

数据[0]的价值是多少?

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

if (!data[0]) { ... }
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 20

在大多数情况下,int对象没有"默认"值.

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

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

  • @Jacob:类型没有值.对象具有价值.未显式初始化的对象在某些语言中可能具有某些默认值(在某些情况下甚至在C中). (4认同)
  • @Jacob:C和C++中的"对象"只是"存储区域".它是表示某事物的字节序列. (4认同)
  • @Jacob:因为这是您在特定时间使用某些设置编译程序时遇到的结果.当我编译并运行该程序时,我得到的输出为"-858993460-858993460-858993460-858993460-858993460".您的编译器可能是为您零初始化内存.具有标准调试构建设置的Mine,Visual C++是使用"0xcc"预初始化未初始化的对象,以便更容易检测到它们. (3认同)

Jon*_*ler 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;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

你也问"这是什么意思?"

if (!data[0]) { ... }
Run Code Online (Sandbox Code Playgroud)

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

这是一种常用的习语,因为它比其他选择更简洁:

if (data[0] == 0) { ... }
Run Code Online (Sandbox Code Playgroud)


小智 5

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