我做了一个基本的树结构,如下所示
typedef struct Tree {
int val;
struct Tree *left, *right;
}Tree;
我创建了两棵树,一棵的价值为 16,另一棵没有价值。不是空,只是没有值。(树本身为 NULL,但值不是)
当我比较这两个值时,我注意到无论我输入>还是<,它总是计算为 false。
会一直这样吗?因为如果是这样,那就很方便了。有没有
这种情况不起作用?不初始化对象时,其初始值不确定(C 2018 6.2.4)。这意味着它的值不仅不受控制(C 源代码没有对值进行确定性设置),而且值甚至不是固定的(当多次使用时,它可能表现得好像每次都有不同的值)。此外,根据具体情况,使用未初始化的对象也可能具有 C 标准未定义的行为 — 不仅其值可能根本不是任何值,而且尝试使用该值可能会导致程序崩溃或以其他方式行为异常。
当使用未初始化对象的值(并且只是不确定的,而不是未定义的)时,编译器可以自由地表现得好像它有任何值一样。因此,作为优化的一部分,编译器可以省略对值的任何实际测试,并生成分支的代码,就好像测试是真还是假一样,就像编译器碰巧选择的那样。编译器生成的代码实际上是偶然的,无法由您控制。您不能依赖总是评估为 false 的测试。
始终初始化对象。