定義int變量時靠近char的變量會變成0?
程序員最常見到的口頭禪是,“這個問題好奇怪”,“在我機器上好好的!!!” ....
所以,題主的問題根本就不是一個問題。遇到類似問題,應該先從自己代碼本書找原因,而不是去懷疑語言或者編譯器。原因很簡單,這些東東都幾十年了,要是有這么簡單的Bug早就被發現了。
由于題主沒有貼出自己的代碼,因此沒辦法幫題主分析問題在哪,但是在實際開發中有很多原因會導致題主所說的問題。我們舉幾個例子。
局部變量與全局變量局部變量默認是不會被初始化的,因此當訪問局部變量的時候其值是一個隨機值,可能是0,也可能是其它值。
但是全局變量如果沒有被顯示初始化的情況下,是一定被初始化為0的。因此如果你得代碼是這樣的,那么itest的輸出值一定是0,而test則不一定。所以你覺得int變量在靠近char的時候會變成0,其實沒有因果關系。
內存訪問越界另外一種情況是訪問越界的問題,如果你char類型的變量存在訪問越界的問題,可能會把鄰居的變量給覆蓋了,從而導致認為的結果。同樣,我們來看一個例子。
如圖所示,圖中的gtest變量,你本來以為是9的,但實際打印的時候卻是0.這就是因為在對ctest清零的時候越界造成的。
類似的問題還很多,當我們遇到問題的時候還是要盡量從代碼本身找問題,這樣更容易一些。至于編譯器,肯定是有Bug的,估計我們遇到的可能性不會太大。