這個問題在這里已經有了答案: C 中未初始化的變數行為 (4 個答案) 11 小時前關閉。
#include <iostream>
using namespace std;
int main()
{
int d=4,r;
d=r 5;
cout<<d;
return 0;
}
該r變數沒有值。
編譯器如何構建這個程式?!
輸出是:21
uj5u.com熱心網友回復:
變數r沒有賦值。這稱為“未初始化”。
訪問此類變數的值是未定義的行為。
這意味著任何事情都可能發生。沒有定義應該發生什么。顯示粉紅色獨角獸在月球上跳舞的影片的編譯器與終止程式的編譯器一樣符合標準。
出于實際原因,大多數編譯器只使用創建變數時記憶體中位置的任何值。
一些編譯器在除錯配置啟動時用默認值填充所有變數,所以當你看到這個值時你就知道它意味著“未初始化”。
您特定的編譯器所做的是您可以弄清楚的事情,但是更好地利用時間是撰寫一個從一開始就只使用明確定義的行為的程式。
uj5u.com熱心網友回復:
C 中的變數不是默認初始化的。這意味著當你宣告一個變數(原始型別)時,編譯器只是為變數分配記憶體,但實際上并不對存盤在那個地方的值做任何事情。所以你的r變數是16因為這就是你宣告變數之前存盤在該地址的內容。
注意:對于物件,呼叫默認建構式:
class C {
public:
C() { /* DO STUFF */ }
};
// ...
C c; // <-- C::C() is called.
uj5u.com熱心網友回復:
由于r未初始化,因此為其分配了一些垃圾值。它可以分配給任何東西。在你的情況下,它似乎被分配給 16。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534093.html
標籤:C
