定义int变量时靠近char的变量会变成0?
程序员最常见到的口头禅是,“这个问题好奇怪”,“在我机器上好好的!!!” ....
所以,题主的问题根本就不是一个问题。遇到类似问题,应该先从自己代码本书找原因,而不是去怀疑语言或者编译器。原因很简单,这些东东都几十年了,要是有这么简单的Bug早就被发现了。
由于题主没有贴出自己的代码,因此没办法帮题主分析问题在哪,但是在实际开发中有很多原因会导致题主所说的问题。我们举几个例子。
局部变量与全局变量局部变量默认是不会被初始化的,因此当访问局部变量的时候其值是一个随机值,可能是0,也可能是其它值。
但是全局变量如果没有被显示初始化的情况下,是一定被初始化为0的。因此如果你得代码是这样的,那么itest的输出值一定是0,而test则不一定。所以你觉得int变量在靠近char的时候会变成0,其实没有因果关系。
内存访问越界另外一种情况是访问越界的问题,如果你char类型的变量存在访问越界的问题,可能会把邻居的变量给覆盖了,从而导致认为的结果。同样,我们来看一个例子。
如图所示,图中的gtest变量,你本来以为是9的,但实际打印的时候却是0.这就是因为在对ctest清零的时候越界造成的。
类似的问题还很多,当我们遇到问题的时候还是要尽量从代码本身找问题,这样更容易一些。至于编译器,肯定是有Bug的,估计我们遇到的可能性不会太大。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有