空值等于零(0)吗?

时间:2018-11-17 17:18:49

标签: c++ null zero

一个程序员告诉我,如果我们不给任何变量赋值,例如 max ,它将被视为空值。

onBindViewHolder

输出:

if( position+ 1 == questionList.size()){
  // you are at the last item
}

,当键入 max = 0 时,意味着在声明中将 0 分配给 max

它给出的结果相同,即空值等于 0 。 如果是,那么空值 0

之间有什么区别

3 个答案:

答案 0 :(得分:0)

这实际上取决于您使用哪种编程语言编写代码。 例如,如果您在c / c ++中读取in的未初始化变量,则无法知道它将为您提供哪个值。 分配变量后,内存不会归零,因此,无论那里的什么位,它们都将作为该变量类型的值读取。

Game Maker自己的语言GML允许您在编译时决定是否必须将未初始化的变量默认设置为0;但是任何体面的程序员都会关闭该选项而不依赖它;我不知道会自动初始化变量值的其他语言。

我会说依靠这样的功能是不好的做法。


关于null和0之间的差异,它实际上取决于变量的基本类型。 整数只能存储整数,因此null仍可作为整数读取。

答案 1 :(得分:0)

如果您默认在自动存储中初始化基本类型对象(例如int),则该值将为不确定。读取不确定值的行为是不确定的。

未定义的行为意味着标准不会以任何方式限制程序的行为。就C ++标准而言,可能的行为包括但不能保证:

  • 您期望的输出。
  • 您意想不到的输出。
  • 与某些没有UB的程序输出相同。
  • 与某些没有UB的程序的输出不同。
  • 任何输出。
  • 没有任何输出。
  • 您期望的副作用。
  • 您没有想到的副作用。
  • 任何副作用。
  • 没有任何副作用。
  • 可能的副作用包括:
    • 数据损坏。
    • 安全漏洞。
    • 进程能力范围内的一切,希望受到操作系统的限制。
  • 其他系统上的行为不一致。
  • 即使使用其他编译器重新编译,行为也不一致。
  • 即使您使用相同的编译器重新编译,行为也不一致。
  • 行为不一致,即使在另一个执行过程中也没有重新编译:
    • 可能仅在度假时使用。
    • 可能仅在向雇主或重要客户演示程序时
  • 在上述所有情况下的行为一致。

  

一个程序员告诉我,如果我们不给任何变量赋值,例如max,它将被视为空值。

在C ++中,没有像 null value integer这样的东西。有一个空指针和空字符之类的东西,它们都没有直接的关系,也与未初始化的变量无关。

您的程序员正在使用令人困惑的术语,但是如果使用空值,则表示不确定值,那么它们是正确的。在那种情况下,您的问题变为不确定值和0之间的区别,答案是读取不确定值是不确定的行为(见上文)。

  

当类型max = 0表示在声明中将0分配给max

要学究,您有int max=0,这不是 分配,而是初始化。

答案 2 :(得分:0)

在c ++中没有'null'值。局部基元未初始化(此时您将得到恰好在内存中的垃圾),而静态变量和全局变量则被零初始化。因此,说出int max;,您将得到随机垃圾或为零(取决于声明的位置)。